2010-10-10 17 views
7

Tengo un código muy grande, muchos de los cuales son códigos heredados. Quiero saber cuál de todos estos archivos está tomando parte en la compilación. El código está escrito en compiladores de GNU y principalmente en C/C++, pero también en otros programas. Cualquier consejo será muy apreciado.Qué archivos están realmente incluidos al compilar

Gracias,

Moshe.

Estoy compilando en Linux con una combinación de scripts/makefiles. Quiero de alguna manera "ajustar" esta compilación con una herramienta que dará una salida de todos los archivos fuente utilizados en la compilación, preferiblemente con nombres de ruta absolutos.

¿Qué dice usted?

+0

¿Qué sistema de construcción se utiliza? Eso podría ayudar a averiguar qué se está compilando.Por ejemplo, si tiene un archivo MAKE que podría ser un lugar para comenzar. –

+0

posible duplicado de [Herramienta para rastrear #include dependencias] (http://stackoverflow.com/questions/42308/tool-to-track-include-dependencies) –

Respuesta

1

dos opciones vienen a la mente.

  1. analizar el informe de compilación

    Ejecutar una acumulación, guardar el registro, y luego buscar en el registro.

  2. Encuentra los archivos que se abren durante el tiempo de compilación.

    Una forma de hacerlo puede ser utilizar una herramienta de seguimiento del sistema como strace o una herramienta de seguimiento de bibliotecas como ltrace y luego tener en cuenta las llamadas abiertas de archivos.

    Consulte también How can I detect file accesses in Linux?

0
  1. ¿Cómo se crea la aplicación? Es decir. ¿Qué escribes en la terminal para construirlo?
  2. Dependiendo de su respuesta a (1), encontrar el programa pertinente utilizada para la construcción (es decir make, scons, etc.)
  3. Ahora encontrar el archivo de entrada (s) para que el programa de construcción, como Makefile, SConstruct, etc.
  4. Mira en este fichero de construcción y otros ficheros de construcción utilizados por ella para averiguar qué fuente de archivos entran en la acumulación
+0

Hola, Eli, tu solución seguramente puede funcionar. Sin embargo, como gran parte del código es código heredado (incluidos muchos de los archivos make, etc.), preferiría encontrar un programa "contenedor" de algún tipo que pueda filtrar los datos por mí. Gracias Moshe. – Moshe

10

Si desea mostrar los encabezados incluidos a continuación, ya sea compatibles y cómo hacerlo depende en el compilador

por ejemplo,

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> _ 

En lo anterior se puede ver las opciones relevantes para, respectivamente, g ++ y Visual C++.

Saludos & HTH,

- Alf.

2

Para una unidad de compilación dado, por ejemplo, foo.cpp, agregue los indicadores -E -g3 a la llamada de g ++. Esto le proporciona el código preprocesado. Allí puedes ver qué cosas están incluidas.

Cuestiones relacionadas