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 :

option gcc pour rajouter des .h


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut option gcc pour rajouter des .h
    Bonjour,

    Je fais passer des fichiers sur un pre processing en utilisant gcc

    j'ai un dossier qui contient mais fichiers cpp ainsi que les .h correspondant

    seulement je ne veux pas inclure les .h systèmes pour des raisons

    et j'ai créer un fichier "monfichiercreer.h" dans lequel je met les macro les plus utiliser

    mon problème est que je désire avant de faire passer les fichiers dans un pre processing rajouter la ligne #include "monfichiercreer.h"
    seulement je voudrais ne pas toucher au fichier cpp de test et rajouter une ligne de commande que je lance avec le gcc pour que je puisse inclure dans tout les tests mon "monfichiercreer.h"

    merci d'avance de votre aide

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,

    Si j'ai bien compris ce que tu demandes, tu peux préciser les fichier à insérer un à un dans la ligne de commande avec l'option -i:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -ifichier1.h monfichier.cpp
    Il faut cependant avoir la certitude que le fichier se trouvera dans un dossier qui sera parcouru par gcc.

    Cela peut se faire avec l'option -I (i majuscule):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Ichemin/vers/dossier/d_entête -ifichier1.h monfichier.cpp
    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

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Non c'est pas ça mon problème
    je vais donner un petit exemple
    j'ai un fichier cpp
    il contient des include
    voilà par exemple ce qu'il contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    #include "menu.h"
    seulement moi je voudrais qu'il contienne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "monfichiercreer.h"
    Bon y a trois solution que je vois
    1) faire ça à la main c'est à dire rajouter pour chaque fichier que je vais passer au pre processing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "monfichiercreer.h"
    ce qui est impossible car il y a des fois 1000 fichiers à faire passer

    2)faire ça par programmation en ajouter cette ligne
    seulement là aussi ça fausse le programme si je rajoute la ligne

    3) Solution qui si vous pouvez m'aider à la trouver
    c'est d'ajouter dans ma lignde de comande
    une option pour permettre de lui dire de chercher dans le répertoire pour trouver mon fichier et donc en utilisant l'option -I et ensuite de rajouter ou de prendre en considération le include de mon "monfichiercreer.h pour tout les fichiers à passer en test

    voilà j'espère avoir été claire j'ai un peu de mal à faire passer le problème

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    voilà la commande avec ce que vous m'avez donner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-I include -i monfichercrrer.h main.cpp",
                in_path,
                ">",					                      
                "test\\"+out_path};
    in_path: fichier en entrée
    "test\\"+out_path le fichier ou se trouve mon fichier de sortie

    mais ça ne marche pas il reconnait mm pas la commande

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par bilinemiline Voir le message
    voilà la commande avec ce que vous m'avez donner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-I include -i monfichercrrer.h main.cpp",
                in_path,
                ">",					                      
                "test\\"+out_path};
    in_path: fichier en entrée
    "test\\"+out_path le fichier ou se trouve mon fichier de sortie

    mais ça ne marche pas il reconnait mm pas la commande
    Mais je n'ai pas parlé de patch...

    J'ai parlé d'un option de compilation, car c'était le sens que j'avais donné à ta question en fonction de son titre...

    Ici, je parle "simplement" de rajouter l'option -I (si besoin) et l'option -i (certainement) dans ton makefile ou tout autre système de génération automatique.

    Les sources ne sont absolument pas modifiées, et c'est gcc qui fait "tout le boulot" en incluant automatiquement le fichier indiqué lors de la compilation

    Si, maintenant, ton but est de modifier effectivement les fichiers, tu devra soit te palucher le tout à la main, soit trouver (par exemple) une ligne qui apparait dans l'ensemble des fichiers qui requièrent ton fichier d'en-tête et profiter de l'éventuelle possibilité de rechercher cette ligne dans l'ensemble des fichiers présentants dans un ou des dossiers.

    Tu devrais d'ailleurs pouvoir t'en sortir également (si tu identifie une ligne ou des termes qui peuvent t'indiquer que l'inclusion est nécessaire) avec les commande grep et sed (sous linux)... mais je ne les maitrise pas assez bien pour t'en parler
    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 à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    je ne désire pas modifie dans les fichiers justement
    et je t'ai donné la ligne de commande que j'ai mise
    c'est effectivement ce qu'il faut faire
    mais il reconnait pas la commande
    ce pourquoi je t'ai ecris la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-I include -imonfichercrrer.h main.cpp",
                in_path,
                ">",					                      
                "test\\"+out_path};
    voilà ce qu'il m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.io.IOException: CreateProcess error=87, Paramètre incorrect

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    comme je sais que les espace dans une commande sont indésirer j'ai mis aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-I include","-imonfichercrrer.h","main.cpp",
                in_path,
                ">",					                      
                "test\\"+out_path};
    voilà ce qu'il m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.io.IOException: CreateProcess error=87, Paramètre incorrect
    [/QUOTE]

    voilà .............

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    A mon avis la bonne syntaxe c'est "-include monfichercrrer.h"

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    ça ne marche pas non plus
    j'ai essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-include monfichercrrer.h"
                in_path,
                ">",					                      
                "test\\"+out_path};
    et aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-include","monfichercrrer.h",
                in_path,
                ">",					                      
                "test\\"+out_path};
    qui me donne une erreur
    et j'ai essayer
    de ne pas mettre l'extension monfichercrrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-include","monfichercrrer",
                in_path,
                ">",					                      
                "test\\"+out_path};
    il me donne un fichier en sortie éronné
    qui contient cette phrase
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Program too big to fit in memory

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    ET Bien en si je lance la commande sur l'invite de commande ça marche
    donc le problème ne vient de la commande
    de plus si je met dans mon fichier cpp cette ligne
    "-include metrixware.h", et que je lance cette commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-I Include", 
                in_path,
                ">",					                      
                "test\\"+out_path};
    ça marche très bien
    seulement quant j'ai envie de pas l'ajouter manuellement et de mettre aussi
    -include metrixware.h
    ça ne marche plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-I Include", 
                "-include metrixware.h",
                in_path,
                ">",					                      
                "test\\"+out_path};
    voilà l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.io.IOException: CreateProcess error=87, Paramètre incorrect
    donc c'est juste au niveau de "-include metrixware.h", qu'il l'est le problème mais je ne vois pas pourquoi

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Il ne faut pas d'espace entre les différentes options et les paramètre qu'elles prennent...

    C'est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -Iinclude et -imonfichier.h
    qu'il faut utiliser...

    Ceci dit, j'ai du mal à comprendre la raison qui te pousse à vouloir le faire en java

    tu ne dispose pas, tout simplement, d'un Makefile , ce serait bien plus simple
    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

  12. #12
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    je travail sur une suite d'une application JAVA, sur les parseurs
    et là pour des besoins de l'application je me vois obliger de travailler avec le pre processing, et il y a une certaine norme à suivre en ce qui concerne
    l'application à savoir la classe pre processing qui contient cette ligne de commande qui me pose problème

    voilà donc le résultat pour le moment,
    -LibM le dossier ou se trouve mon monfichercreer.h

    1) si je fais ça ça ne marche pas dutout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-ILibM", 
                "-imonfichercreer.h",
                in_path,
                ">",					                      
                "test\\"+out_path};
    2) si je fais ça e que j'inclut le la ligne dans le cpp ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-ILibM",
                in_path,
                ">",					                      
                "test\\"+out_path};
    3) si je fais ça
    le fichier en sortie est vide donc pas de pre processing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "Resource\\gcc.exe",
                "-E",					                    
                "-B","Resource",
                "-imonfichercreer.h",
                in_path,
                ">",					                      
                "test\\"+out_path};

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    sur l'invite de commande ça marche tres bien comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    D:\Amina\WorkSpace\ParseurCPP5>
    Resource\gcc.exe -E -B Resource 
    -I Resource\IncludeMetrixware -include metrixware.h
    TestCases\main.cpp > Test\resl.tmp

    D:\Amina\WorkSpace\ParseurCPP5> --> le chemin ou se trouve le gcc
    Resource\gcc.exe -E -B Resource -I --> faire appel que pre processing
    Resource\LibM --> le fichier ou se trouve fichiercreer.h
    -include monfichiercreer.h
    TestCases\main.cpp > Test\resl.tmp --> fichier cpp en entrée et celui
    en sortie

    ou est donc le problème avec la commande

  14. #14
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Fais attention au fait que, si l'argument passé aux options -i et -I doit etre "collé" à ces options, tu dois avoir un espace entre chaque option malgré tout...

    Ne serait-ce donc pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String[] Commande = new String[] {"command.com","/C",
                "Resource\\gcc.exe ",
                "-E ",					                    
                "-B","Resource ",
                "-ILibM ", 
                "-imonfichercreer.h ",
                in_path,
                "> ",					                      
                "test\\"+out_path};
    (note les espaces avant les guillemets fermants ) qu'il faudrait écrire (ou mieux, veiller à ce que la création de l'instruction les ajoute automatiquement)
    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

  15. #15
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    j'ai essayé avec mais ça passe pas
    et puis je ne pense pas que l'erreur vient de là puisque la commande sans c'est espèce passe très bien
    le fichier est généré ...
    seulement cette option des que je la rajoute il y a plus rien qui passe


    Caused by: java.io.IOException: Cannot run program "command.com": CreateProcess error=87, Paramètre incorrect

  16. #16
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    j'ai trouvé ou est le problème
    c'est le fichier où se trouve les fichier de test
    in_path: c'est un chemin qui n'est pas donné en dur
    il est en paramètre
    pour spécifier le chemin des test
    je l'ai afficher il contient ça
    D:\Amina\WorkSpace\ParseurCPP7\.\TestCases\main.cpp

    seulement quant je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String[] cmd = new String[] {"command.com","/C",
    	            "Resource\\gcc.exe",
    	            "-E",									                    
    	            "-B","Resource",
    	            "-I","LibM",
    	            "-include","monfichiercreer.h",
    	            "TestCases\\main.cpp",
    	            ">",				                      
    	            "Test\\tes.tmp"};
    ça marche
    reste maintenant regler le problème
    mais au moins je sais d'ou il vient

Discussions similaires

  1. boucle pour rajouter des items dans combobox
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/08/2012, 05h46
  2. Réponses: 0
    Dernier message: 15/03/2010, 01h25
  3. Réponses: 0
    Dernier message: 17/01/2009, 12h33
  4. Organisation pour rajouter des tables
    Par thufir hawat dans le forum Access
    Réponses: 4
    Dernier message: 14/10/2005, 12h09

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