En un sistema Unix, ¿dónde busca gcc los archivos de encabezado?
Pasé un poco de tiempo esta mañana buscando algunos archivos de encabezado del sistema, así que pensé que sería una buena información tener aquí.
`gcc -print-prog-name=cc1plus` -v
Este comando le pregunta a gcc qué preprocesador de C ++ está usando y luego le pregunta a ese preprocesador dónde busca incluir.
Obtendrá una respuesta confiable para su configuración específica.
Del mismo modo, para el preprocesador C :
`gcc -print-prog-name=cpp` -v
cpp
lugar decc1
? En mi debian jessie$(gcc -print-prog-name=cpp) -v
(correctamente) da un camino más, que es/usr/include/x86_64-linux-gnu
/dev/null
, así`gcc -print-prog-name=cc1` -v < /dev/null
.Ctrl
+D
, que envía "fin de archivo" en Unix-talk.Además, gcc buscará en los directorios especificados después de la
-I
opción.fuente
Puede crear un archivo que intente incluir un encabezado falso del sistema. Si ejecuta gcc en modo detallado en una fuente de este tipo, enumerará todas las ubicaciones de inclusión del sistema a medida que busca el encabezado falso.
fuente
echo "#include <bogus.h>" | gcc -v -x c -
gcc -v -E - < /dev/null
ocpp -v < /dev/null
son suficientes Solo tiene que ejecutar el preprocesador , no importa qué entrada vea. (Las rutas de búsqueda se imprimen durante el inicio, incluso antes de que vea su entrada).La Sección de CPP del Manual de GCC indica que los archivos de encabezado pueden ubicarse en los siguientes directorios:
fuente
Para que GCC imprima el conjunto completo de directorios donde buscará encabezados del sistema, invoque de esta manera:
que producirá la salida del formulario
Si tiene
-I
opciones de familia en la línea de comando, afectarán lo que se imprime.(El
sed
comando es deshacerse de todos los demás archivos basura que imprime esta invocación, yLC_ALL=C
es asegurarse de que elsed
comando funcione: las frases "comienza aquí" y "Fin de la lista de búsqueda" se traducen IIRC).fuente
fuente
El comando puede verificar el conjunto de rutas donde el compilador busca los archivos de encabezado: -
cpp -v
Si declara #include "" , el compilador primero busca en el directorio actual del archivo fuente y, si no lo encuentra, continúa buscando en los directorios recuperados anteriormente.
Si declara #include <> , el compilador busca directamente en los directorios obtenidos del comando anterior.
Fuente: http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026
fuente
Uno podría ver la ruta de inclusión (adicional) para un programa C desde bash al verificar lo siguiente:
Si está vacío, podría modificarse para agregar ubicaciones de inclusión predeterminadas, de la siguiente manera:
fuente
Estos son los directorios en los que gcc busca de manera predeterminada los archivos de encabezado especificados (dado que los archivos de encabezado están incluidos en los galones <>); 1. / usr / local / include / --utilizado para archivos de encabezado de terceros. 2. / usr / include /: se utiliza para los archivos de encabezado del sistema.
Si decide colocar su archivo de encabezado personalizado en un lugar que no sea los directorios mencionados anteriormente, puede incluirlos de la siguiente manera: 1. usando comillas ("./custom_header_files/foo.h") con la ruta de los archivos, en lugar de galones en la declaración de inclusión. 2. usando el modificador -I al compilar el código. gcc -I / home / user / custom_headers / -c foo.c -p foo.o Básicamente, el modificador -I le dice al compilador que primero busque en el directorio especificado con el modificador -I (antes de verificar los directorios estándar). usando el modificador -I, los archivos de encabezado se pueden incluir usando galones.
fuente