2010-10-10 5 views
7

J'ai un très gros code, dont beaucoup est du code existant. Je veux savoir lequel de tous ces fichiers participe à la compilation. Le code est écrit dans les compilateurs GNU et principalement en C/C++, mais aussi dans d'autres programmes. Tout conseil sera très apprécié.Quels fichiers sont réellement inclus lors de la compilation

Merci,

Moshe.

Je compile sous linux avec un mélange de scripts/makefiles. Je veux en quelque sorte «envelopper» cette construction avec un outil qui donnera une sortie de tous les fichiers sources utilisés dans la construction, de préférence avec des noms de chemins absolus.

Que dites-vous?

+0

Quel système de construction est utilisé? Cela pourrait aider à déterminer ce qui est compilé.Par exemple, si vous avez un makefile qui pourrait être un endroit pour commencer. –

+0

duplication possible de [Outil pour suivre les dépendances #include] (http://stackoverflow.com/questions/42308/tool-to-track-include-dependencies) –

Répondre

1

Deux options viennent à l'esprit.

  1. Parse le journal de compilation

    Exécuter un build, enregistrez le journal, puis la recherche dans le journal.

  2. Recherchez les fichiers ouverts pendant la compilation.

    Pour ce faire, vous pouvez utiliser un outil de traçage système tel que strace ou un outil de traçage de bibliothèque tel que ltrace, puis rechercher des appels de fichiers ouverts.

    Voir aussi How can I detect file accesses in Linux?

0
  1. Comment construisez-vous l'application? C'est à dire. Que tapez-vous au terminal pour le construire?
  2. En fonction de votre réponse à (1), trouver le bon programme utilisé pour la construction (c.-à-make, scons, etc.)
  3. trouvent maintenant le fichier d'entrée (s) à ce programme de construction, comme Makefile, SConstruct, etc.
  4. Regardez dans ce fichier de construction et d'autres fichiers de construction utilisés par celle-ci pour déterminer quels fichiers source vont dans la construction
+0

Salut Eli, votre solution peut certainement fonctionner. Pourtant, comme le code est en grande partie du code existant (y compris de nombreux fichiers make, etc.), je préférerais trouver un programme "wrapper" quelconque qui pourrait être capable de filtrer les données pour moi. Merci Moshe. – Moshe

10

Si vous voulez montrer en-têtes inclus alors si cela est pris en charge et comment le faire dépend sur le compilateur.

Par ex,

C:\test> (g++ --help --verbose 2>&1) | find "header" 
    -print-sysroot-headers-suffix Display the sysroot suffix used to find headers 
    --sysroot=<directory> Use <directory> as the root directory for headers 
    -H       Print the name of header files as they are used 
    -MG       Treat missing header files as generated files 
    -MM       Like -M but ignore system header files 
    -MMD      Like -MD but ignore system header files 
    -MP       Generate phony targets for all headers 
    -Wsystem-headers   Do not suppress warnings from system headers 
    -print-objc-runtime-info Generate C header of platform-specific features 
    -ftree-ch     Enable loop header copying on trees 

C:\test> (cl /? 2>&1) | find "include" 
/FI<file> name forced include file  /U<name> remove predefined macro 
/u remove all predefined macros   /I<dir> add to include search path 
/nologo suppress copyright message  /showIncludes show include file names 

C:\test> _ 

Dans ce qui précède, vous pouvez voir les options pour respectivement g ++ et Visual C++.

Vive & HTH,

-. Alf

2

Pour une unité de compilation donnée, par exemple foo.cpp, ajoutez les indicateurs -E -g3 à l'appel de g ++. Ceci vous donne le code prétraité. Là, vous pouvez voir quelles choses sont incluses.

Questions connexes