2011-04-29 22 views
60

¿Cómo puedo saber dónde g ++ pudo encontrar un archivo de inclusión? Básicamente si yo¿Cómo saber de dónde se incluye un archivo de encabezado?

#include <foo.h> 

g ++ escanearé la ruta de búsqueda, usando cualquier opción de incluir para agregar o modificar la ruta. Pero, al final de los días, ¿hay alguna forma en que pueda decir la ruta absoluta de foo.h que g ++ eligió compilar? Especialmente relevante si hay más de un foo.h en la miríada de rutas de búsqueda.

Como forma de lograrlo ... ¿hay alguna manera de que g ++ me diga cuál es su ruta de búsqueda final después de incluir los valores predeterminados y todas las opciones de inclusión?

+1

Relacionados : ¿hay alguna manera de decir qué padre incluye archivos de los que se incluyó un archivo de inclusión infantil? Es decir. para mostrar el gráfico incluido (Sugerencia: gcc -E no está del todo ... podría procesarse para cederlo) –

Respuesta

47

Esto le dará a hacer que las dependencias lista de rutas absolutas de incluir archivos:

gcc -M showtime.c 

Si no desea que el sistema incluye (es decir #include <something.h>) utilizan a continuación:

gcc -MM showtime.c 
+12

Debe tenerse en cuenta que si usa junto con "-o myObj.o", la salida, no el binario compilado, entra en "myObj.o". -M tiene un implícito -E, por lo que la compilación no está formada. Encontré que -MD es una opción muy útil en su lugar, realiza la compilación y coloca la salida en myObj.d en su lugar. Hacer un parámetro adecuado para simplemente anteponer a su línea de compilación sin efectos extraños como * .o ahora contiene la salida en lugar del binario. Gracias por tu ayuda. – harschware

4

Claro utilizar

g++ -E -dI ... (whatever the original command arguments were) 
3

Si utiliza -MM o una de las opciones relacionadas (-M, etc), se obtiene sólo la lista de cabeceras que se incluyen sin tener toda la otra salida del preprocesador (que pareces para obtener la solución g++ -E -dI sugerida).

+0

'g ++ -MM t.cc' no muestra ninguna inclusión, solo' a: t. cc'. ¿Necesita algo más? – wallyk

+1

Agradable: para completar, puede obtener similitudes con MSVC con la opción '/ showIncludes'. MSVC incluso sangrará para mostrarle el anidamiento de los encabezados (no veo eso con '-M' en GCC). –

+0

@wallyk: prueba '-M' –

58
g++ -H ... 

también imprimirá la ruta completa de los archivos incluidos en un formato que muestre qué encabezado incluye qué

+3

Esto parece ser más útil que -M en mi experiencia. Me gusta la visualización jerárquica de lo que incluye qué. –

+0

Bueno, es útil para depuración. –

+0

Esta es la mejor respuesta. Puede agregarlo a su proceso de compilación sin cambiar nada más. – Timmmm

Cuestiones relacionadas