GCC, How do I show what the default include path is.

Kai Ruottu karuottu@mbnet.fi
Thu Sep 20 05:28:00 GMT 2007


Sergei Organov wrote:
> Kai Ruottu <karuottu@mbnet.fi> writes:
>
>   
>> G-Mail wrote:
>>     
>>> I like to know the default include path gcc use. GCC start including
>>> files in a defined order of directories
>>> starting with directories defined during build of gcc. I think there
>>> is an command-line option which list
>>> each include directory but I can't remember the option.
>>>
>>> I know gcc -v .....
>>>       
>> The preprocessor part, 'cpp',  uses the headers, not  'gcc', so  quite
>> logically you should try 'cpp -v' and
>> not 'gcc -v' !
>>     
>
> Sorry, what's the problem with gcc -v ? Consider:
>
> $ echo | gcc -v -x c -E -
>   
In my case the options '-x' and '-E' are belonging to those  which  I 
have never needed  meanwhile
the '-v' and the '-Wa' (give options to the assembler), '-Wl'  (give 
options to the  linker) and  of
course the '-Wp', are those "familiar" ones needed regularly. So one 
tries to use those one already
knows.

Generally the logic here is the "give a command to 'gcc', 'g++' or 'cpp' 
(the installed GCC drivers),
which puts it to tell those search paths for things". Not "give a 
command which does a fake 'compile'
and for it use some verbose option which puts the fake compile process 
to tell these things".  The
'--help', '-print-search-dirs' and the bare '-v' are 'stand-alone' 
options, one doesn't try to 'compile'
anything when using them... With those '-W' options one then tries to 
give similar 'stand-alone' options
to the 'subprograms' somewhere out there, again not trying to compile 
anything with them, only to
give those standalone options...

The '--help', '--print-search-dirs', '--print-prog-name=' etc. are 
options which should put GCC to
reveal info about itself and there should be an option which will give 
those headers search paths.

> Using built-in specs.
> Target: i486-linux-gnu
> Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --with-tune=i686 --enable-checking=release i486-linux-gnu
> Thread model: posix
> gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
> /usr/lib/gcc/i486-linux-gnu/4.1.2/cc1 -E -quiet -v - -mtune=i686
>
>   
All the previous doesn't belong to the "show the headers search paths" 
in any way, so this output
shouldn't be seen with the used command.  The 'cpp -v' also outputs 
these unnecessary things....

> ignoring nonexistent directory "/usr/local/include/i486-linux-gnu"
> ignoring nonexistent directory "/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../i486-linux-gnu/include"
> ignoring nonexistent directory "/usr/include/i486-linux-gnu"
> #include "..." search starts here:
> #include <...> search starts here:
>  /usr/local/include
>  /usr/lib/gcc/i486-linux-gnu/4.1.2/include
>  /usr/include
> End of search list.
>   

These rows then would be what the command user would like to see...

> # 1 "<stdin>"
> # 1 "<built-in>"
> # 1 "<command line>"
> # 1 "<stdin>"
>   

And these are again something vain....

So my favourite would be the 'cpp -Wp,-v', to use the "real cpp" with 
the option '-v'....
Surprisingly the 'gcc -Wp,-v' doesn't work - 'gcc' used to exec the 
"real cpp" and give
that '-v' to it :(

BUT.... Now I and probably others too, learned that '-x' option for 
selecting the language,
so let's see what it would do if used with "my favourite" command :

[root@Dell gcc]# cpp -x c++ -Wp,-v
ignoring nonexistent directory 
"/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/i386-redhat-linux
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/backward
 /usr/local/include
 /usr/lib/gcc/i386-redhat-linux/4.1.2/include
 /usr/include
End of search list.

Really nice!  Thanks Sergei for teaching us this option!



More information about the Gcc-help mailing list