9

一些头文件存在于/src/dir1/(例如:a.h、、b.hc.h)中。我的源文件存在于/src/dir2/file.cpp. 我使用了一些存在的头文件,/src/dir1/但在编译过程中出现了类似header file not found.

然后我更改了包含路径,例如#include "../src/dir1/a.h",然后错误消失了,file.cpp但我not found/src/dir1. 因为我包含了头文件 say a.h,它a.h包含了一些其他的头文件,这些头文件存在于/src/dir1/(比如说b.hc.h存在于a.h)中。

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

注意:我正在使用scons构建。

4

3 回答 3

8

-I您可以使用以下命令行参数将目录添加到包含文件搜索路径gcc

gcc -I/src/dir1 file.cpp
于 2013-07-04T17:04:17.163 回答
2

SCons 常见问题解答

如何让 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 文件中的任何一个发生更改,则不会重新构建程序。

于 2013-07-04T17:07:57.763 回答
2

它没有找到,因为它不存在。你有一个额外的间接级别。“/src/foo/”中的文件将在“/src/bar/”中包含一个带有“include ../bar/the_file”的文件

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

要亲自查看,请将 dir1 设为当前目录 (chdir /src/dir1) 并比较“ls ..”和“ls ../src”之间的差异。第二个 ls 不起作用,但第一个会。

说得通?希望有帮助

于 2013-07-04T17:11:32.537 回答