Adding include directories (-I)
Sebastian Biallas
sb@biallas.net
Wed Feb 28 15:42:00 GMT 2007
Ian Lance Taylor wrote:
> Sebastian Biallas <sb@biallas.net> writes:
>
>> My question is: Which command line switch of gcc is preferred for adding
>> include directories?
>
> -I
Yes, I though so, too. But there is a problem with it, see below.
>
>> And: What's the reason that -I modifies system
>> headers includes?
>
> It doesn't. It just changes the search path used to find header
> files.
Yes, but it modifies the search path for "" *and* <> includes.
This happens:
$ ls
process.h test.cc
$ cat test.cc
#include <unistd.h>
$ cat process.h
#error Wrong process.h included!
$ g++ -c -mno-cygwin -o test.o test.cc
$ g++ -c -I. -mno-cygwin -o test.o test.cc
In file included from
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/unistd.h:11,
from test.cc:1:
./process.h:1:2: #error Wrong process.h included!
[The line 11 of unistd.h reads #include <process.h>]
So, the -I. option adds '.' to the list of system header directories.
That means if I have a file which accidently has some "forbidden" name
which is used somewhere deep in the system headers, everything breaks.
I'm not sure if this is actually a (cygwin) bug or a feature, but this
certainly makes -I unusable for me...
> If you want to do something more complex, see the documentation for
> -iquote and -isystem. They probably don't do what you want, but they
> may be instructive.
-iquote is what I want, but:
It changed syntax recently (was -I- before). So it's not (easily)
possible to write a simple makefile for use with gcc3 and gcc4. And
automake adds -I. by default.
More information about the Gcc-help
mailing list