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

 C++ Discussion :

compiler à distance


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Par défaut compiler à distance
    Bonjour,

    J'aimerais savoir si je fais :

    et que main.cpp se situe dans un autre répertoire.

    Est-que cela peut-il marcher si je rajoute une option de compilation?

    Le problème est que je souhaites compiler le meme fichier.cpp dans plusieurs répertoires (car l'affichage des données agit de la meme manière à chaque fois).

    Merci d'avance.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Ce que tu veux faire est assez flou, pourquoi vouloir compiler plusieurs fois le même fichier source .

    Sinon, tu as plusieurs solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    g++ [filedir]/main.cpp
    //ou
    path=$PWD
    cd [filedir] && g++ main.cpp  -o $PWD/exe
    cd $PWD

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    il n'y a rien de magique dans le processus de compilation.

    Le makefile est exécuté dans le répertoire courant (ou plutôt exécute g++ dans le répertoire courant). Donc quel que soit le fichier à compiler, il faut qu'il le trouve.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Par défaut
    Bonjour,

    Pour etre plus clair, j'ai un fichier opengl.cpp qui à partir d'un fichier maillage.msh fait l'affichage d'une courbe.

    Or il y a plusieurs fichier maillage.msh dans plusieurs répertoire.

    Du coup, j'ai copié 4 fois opengl.cpp dans 4 répertoires différents.
    Je voulais savoir s'il n'y aurait pas une méthode plus économique en placant opengl.cpp dans un seul répertoire et en l'appelant via la makefile.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Bon dieux, oui, qu'il y a des solutions plus économiques!

    En gros, elles passent par le fait de ne pas indiquer en dur le nom du fichier à utiliser.

    Je ne sais pas trop si la lecture du fichier se fait au moment de la compilation ou si elle se fait à l'exécution, mais :

    Si elle se fait à l'exécution, tu peux, tout simplement, faire en sorte que la fonction main accepte des arguments et demander à ce que l'invocation de ton programme nécessite au moins un argument qui corresponde, au choix au chemin vers le dossier dossier dans lequel se trouve un fichier dont le nom est fixe, soit un chemin vers un nom de fichier particulier.

    En gros, ta fonction main pourrait ressembler à quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(int argc, char * argv){ // prototype obligatoire pour permettre l'utilisation des arguments
        if(argc!= 2) {    //(*)
            std::cout<<"erreur : utilisation = monprogramme <chemin/vers/fichier .msh>";
            return 1;
        }
        std::string filename(argv[1]); //(*)
        /* le reste, en utilisant filename comme nom de fichier */
    }
    (*) lorsque l'on s'attend à ce qu'un exécutable accepte des arguments, le système d'exploitation transmet systématiquement:
    • un entier qui correspond au nombre d'arguments indiqués en lignes de commande
    • un tableau de chaine de caractères C style dans lequel le premier élément correspond au nom de l'exécutable dans lequel et les éléments suivants correspondent à chaque chaine de caractères comprise entre deux espaces (ou équivalent).
    si ton application s'appelle monProgramme, tu peux donc l'appeler sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monProgramme dossier1/fichier.msh
    et, obtenir au niveau de la fonction main les valeurs
    • argc = 2
    • argv[0] = "monProgramme" (ou c:\\Dossier\\MonProgramme.exe, sous windows)
    • argv[1] = "dossier/fichier.msh"


    Si le contenu du fichier msh doit se faire à la compilation, tu peux toujours envisager de rendre la définition d'un symbole préprocesseur (mettons FILENAME) obligatoire sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ifndef FILENAME
        error FILENAME must be defined to a msh filename path
    #endif
    int main(){
        std::string filename(FILENAME);
        /* utilisation de filename pour récupérer le contenu du fichier msh ici */
    }
    et compiler ton fichier sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -c opengl.cpp -DFILENAME=chemin/vers/fichier.msh
    NOTA : sauf erreur, la solution adéquate devrait sûrement être plus proche de la première que j'ai indiquée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 294
    Par défaut
    Merci beaucoup.

    J'ai opté pour faire -I/(chemin du hpp).
    Don mon problème est résolu.

    Pour le fichier opengl.cpp, j'ai juste mis l'exécutable dans chaque dossier.

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

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. Accès à la base de registre windows à distance
    Par xavame dans le forum Sécurité
    Réponses: 4
    Dernier message: 13/07/2005, 15h23
  3. Vitesse de compilation
    Par srvremi dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/07/2002, 16h49
  4. Réponses: 2
    Dernier message: 06/07/2002, 12h36
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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