IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Compilation de code c++ dans du code c++.


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut Compilation de code c++ dans du code c++.
    Salut, je souhaite réalisé une sorte d'EDI.

    Cependant je n'arrive pas à récupérer les messages d'erreurs du compilateur dans un fichier :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (item->getText() == "Run") {
          std::string command = "g++ "+appliname+"/"+"*.cpp -o "+appliname+"/"+appliname+".out > errors.err";
          std::system(command.c_str());
    }

    Tout s'affiche sur la console et il n'y a rien dans le fichier. :/

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    Les erreurs sont souvent balancées sur stderr. C'est donc ce flux qu'il faut rediriger vers ton fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string command = "g++ "+appliname+"/"+"*.cpp -o "+appliname+"/"+appliname+".out 2> errors.err";

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ok le 2 c'est pour rediriger à partir de la console d'erreurs donc.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Et puis, ca, ce n'est pas un run, c'est un "build main and link"

  5. #5
    Invité
    Invité(e)
    Par défaut
    Et puis, ca, ce n'est pas un run, c'est un "build main and link"
    Oui mais je vais le run une fois qu'il compilera.

    J'ai un autre soucis maintenant mais avec clang++ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    clang: error: cannot specify -o when generating multiple output files
    Voici la commande que j'envoie :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    std::string command = "clang++-3.6 -Wall -std=c++14 -g -c "+appliname+"/"+"*.cpp -o "+appliname+"/"+appliname+".out 2> errors.err";
    std::system(command.c_str());

    Ne me dîtes pas que je dois spécifier un fichier de sortie pour chaque fichier source.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    tu peux exécuter plusieurs fois la commande, une fois par application à compiler.
    De toute façon tu n'as pas eu de problème avec l'existence de plusieurs main dans les fichiers cpp donnés en argument?

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai juste retiré le -c et ça marche.

    Pourtant code::blocks rajoute le -c devant les sources et ça passe.

    En tout cas maintenant j'ai un exécutable et je peux l'exécuter, ça pète.

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est pourtant la base de la compilation séparée, qui ne sont pas une particularité des compilateurs, mais est spécifié par le C comme le C++

    l'option -c de gcc signifie de ne pas faire l'édition de lien. Du coup, chaque unité de compilation est traduite en un fichier dit "objet".
    (il existe aussi -E pour ne pas dépasser la phase de préprocesseur)

    l'édition de lien en elle-même utilise ces fichiers objets pour produire un exécutable.

    gcc considère que le format d'extension normal des fichiers objets est .o.
    ainsi, gcc -c *.cpp produit les *.o, et la commande d'édition des liens est gcc *.o.

    dans tous les cas, -o permet de spécifier le nom du fichier produit par la commande.

    Bref, pour écrire un programme qui en utilise un autre, il faut connaitre l'interface précise de cet autre.
    Code::blocks manipule des makefile (utilitaire make) et ne compile pas lui-même.
    Par contre, comme il génère ces makefiles, les développeurs se sont renseignés sur le fonctionnement de make comme des compilateurs. Il me semble même qu'ils ont implémenté leur propre variante de make

  9. #9
    Invité
    Invité(e)
    Par défaut
    Ok.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo