2011-02-12 18 views
68

Cuando compilo un archivo fuente muy simple con gcc no tengo que especificar la ruta a archivos de inclusión estándar como stdio o stdlib.¿Cuáles son los directorios de inclusión predeterminados de GCC?

¿Cómo sabe GCC cómo encontrar estos archivos?

¿Tiene la ruta /usr/include cableada dentro, o obtendrá las rutas de otros componentes del sistema operativo?

Respuesta

94

Con el fin de averiguar las rutas predeterminadas utilizadas por gcc/g ++, así como sus prioridades se examina la salida de los comandos siguientes:

  1. Para C:

    gcc -xc -E -v - 
    
  2. Para C++:

    gcc -xc++ -E -v - 
    

El crédito es para el equipo de Qt Creator.

+0

¡Buen uso del comando en sí! :) – Stark07

+1

'cpp -v/dev/null -o/dev/null' –

+0

Tenga en cuenta que este comando genera' stderr', no 'stdout'. – barjak

3

Aquí es un artículo que describe las rutas de búsqueda de gcc: http://www.network-theory.co.uk/docs/gccintro/gccintro_21.html

Además, puede especificar rutas de búsqueda adicionales con el interruptor -I. Puede hacer esto desde la línea de comando o en su archivo MAKE.

+1

También hay pkg-config (http://pkg-config.freedesktop.org/wiki/) que se puede usar (opcionalmente), que este artículo no menciona. –

21

hay un comando con una salida más corta, lo que permite cortar automáticamente el incluyen pathes de líneas, comenzando con un único espacio:

$ echo | gcc -Wp,-v -x c++ - -fsyntax-only 
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include-fixed" 
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../x86_64-redhat-linux/include" 
#include "..." search starts here: 
#include <...> search starts here: 
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2 
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/x86_64-redhat-linux 
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/backward 
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include 
/usr/local/include 
/usr/include 
End of search list. 

El mérito es de la libC++ front-page.

Cuestiones relacionadas