tags:

views:

360

answers:

3

My development environment is such that I have some_header.h in /usr/include and in /another/directory. /another/directory contains some header files I need to include in my program, but I want to use some_header.h from /usr/include. When I use

 gcc ... -I/another/directory

gcc uses /another/directory/some_header.h. If I use

 gcc ... -I/usr/include -I/another/directory

gcc does the same thing because it ignores /usr/include since it is part of the standard search path, but it gets searched after non standard directories included with -I.

Any ideas?

A: 

Have you tried unsetting the system INCLUDE path environment variable?

Martin Beckett
Well, it's empty, but that doesn't matter. gcc automatically looks in certain directories, irrespective of environment variables. http://gcc.gnu.org/onlinedocs/gcc-4.1.1/cpp/Search-Path.html#Search-Path
Dan Hook
Ah the joys of GCC.
Martin Beckett
+2  A: 

Have you looked at -nostdinc ?

The manual says:

-nostdinc
Do not search the standard system directories for header files. Only the directories you have specified with -I options (and the directory of the current file, if appropriate) are searched.

Of course that means that you will have to specify anything that normally goes on the standard search path that you do want...

dmckee
+2  A: 

Use the -iquote switch:

Include the files that are in another/directory using quotes:

#include "another_file.h"

Then use

gcc -iquote /another/include ...

to add a search path for quoted include files. This switch will add a directory that is searched for quoted include files after the current directory and before -I and system include paths.

Include your other include files using brackets (i.e. #include <header.h>).

See here for more information: Where are include files stored - Ubuntu Linux, GCC

Karl Voigtland
This seemed so close to working, but it turns out that the files in /another/directory use #include<file.h> so they couldn't find their include files when I used -iquote.
Dan Hook
Hmm, thats odd. The preprocessor should still search for <file.h> in the -I and system include paths. Seems to work for me.
Karl Voigtland