c / c ++:找不到头文件

时间:2013-07-04 16:58:53

标签: c++ c include

/src/dir1/中存在一些标头文件(例如:a.hb.hc.h等。我的源文件存在于/src/dir2/file.cpp中。我使用了/src/dir1/中存在的一些头文件,但在编译期间我遇到了header file not found之类的错误。

然后我更改了#include "../src/dir1/a.h"之类的包含路径,然后file.cpp中的错误消失,但not found中出现的头文件中出现/src/dir1错误。由于我添加了标题文件a.h,因此a.h包含/src/dir1/中存在的一些其他标题文件(例如b.hc.h 1}})。

如何在a.h中添加头文件(a.h),以便它不应要求修改/src/dir2/file.cpp中存在的头文件中的包含路径?

注意:我正在使用/src/dir1/来构建。

3 个答案:

答案 0 :(得分:3)

您可以使用-I的{​​{1}}命令行参数将目录添加到包含文件搜索路径:

gcc

答案 1 :(得分:3)

找不到,因为它不在那里。你有一个额外的间接层。 “/ src / foo /”中的文件将在“/ src / bar /”中包含一个文件,其中包含“include ../ bar / the_file”

换句话说,在您的示例中,没有相对于dir1或dir2的“../src/”。关系是“dir1 /../ dir2”或“dir1 /../../ src / dir2”

要自己查看,请将dir1设为当前目录(chdir / src / dir1)并比较“ls ..”和“ls ../src”之间的差异。第二个ls将无法工作,但第一个将无效。

有意义吗?希望有所帮助

答案 2 :(得分:2)

SCons FAQ

如何让SCons找到我的#include文件?

如果您的程序在各种目录中包含#include文件,则必须以某种方式告知SCons应在哪些目录中查找#include文件。您可以通过将CPPPATH变量设置为包含要搜索的.h文件的目录列表来执行此操作:

env = Environment(CPPPATH='inc')
env.Program('foo', 'foo.c') 

SCons将向编译命令行添加正确的-I选项,或者适用于您正在使用的C或C ++编译器的任何类似选项。这使您的基于SCons的构建配置可移植。

请特别注意,您不应该像在初步期望的那样直接在CCFLAGS变量中设置包含目录:

env = Environment(CCFLAGS='-Iinc')    # THIS IS INCORRECT!
env.Program('foo', 'foo.c') 

这将使程序正确编译,但SCons不会在“inc”子目录中找到依赖项,如果任何#include文件发生更改,程序将不会重建。