g++ include path

May 22, 2012 at 4:43pm
Hello,
I trying to compile a rather large project initially written and compiled with MSVC++ using g++ in Linux. Within the project I have a local include folder, which I specify in my Makefile as a "CFLAG=-I/path/to/include".

This works well, as long as the header files within the include folder don't use other header files living in the same include folder. When a header file from the include folder includes another header file from this same folder, I get this compile error (../../Include is the local include folder):
../../Include/headers/header_1.h:9:35: fatal error: headers/header_2.h: No such file or directory

If it found header_1.h why doesn't it find header_2.h, given that they are in the same folder?
Any ideas?
Thanks!
May 22, 2012 at 8:30pm
I cannot reproduce your error, ¿could you provide a minimal example?
May 22, 2012 at 9:10pm
This works well, as long as the header files within the include folder don't use other header files living in the same include folder.
Are you including these files with <> or ""?
May 23, 2012 at 11:31am
@ne555: funny thing: I can't reproduce it with a minimal example...that works just fine. The problem seems to lie somewhere else. I will keep trying.

@kbw: I have tried either way...


Anyway, I found out that if I include header_2.h as "header_2.h" without path, it works fine. I don't like that solution, but if it works......

Thanks for the help.
May 29, 2012 at 12:24pm
Why would you use hard-coded paths in any of your source-files?

...usually you would pass the "include" folder to g++ via compiler flag:

g++ -c -o test.o -I ../include/ test.cpp

This way you can use either file anywhere and won't get path problems...

-I == capital i
Last edited on May 29, 2012 at 12:29pm
May 30, 2012 at 10:22am
It's not that I want to....the code is not written by me originally. I am just trying to port it from MSVC to gcc, and I'd wanted to avoid changing all those headers.

But it seems there is no way around it ;)
May 30, 2012 at 1:30pm
But it seems there is no way around it ;)

Sure there is, you just have to do it right.

If it found header_1.h why doesn't it find header_2.h, given that they are in the same folder?

You're not including header_2.h, you're including headers/header_2.h, which apparently does not exist in any of the include paths.
May 30, 2012 at 3:09pm
Mhm...since you're under *nix maybe you could symlink the /header folder into itself ?? All header files should find themself then in a pseudo subfolder?!

e.g. ln -s . include

(replace include with whatever path your headers included)
Topic archived. No new replies allowed.