/src/dir1/
中存在一些标头文件(例如:a.h
,b.h
,c.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.h
和c.h
1}})。
如何在a.h
中添加头文件(a.h
),以便它不应要求修改/src/dir2/file.cpp
中存在的头文件中的包含路径?
注意:我正在使用/src/dir1/
来构建。
答案 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找到我的#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文件发生更改,程序将不会重建。