C ++包含完整路径

时间:2014-03-30 00:56:41

标签: c++ include include-path

我发现#include "../app/thing.h"非常难看,我希望能够从项目的主根导入,如下所示:

#include <project/app/submodule/thing.h>

(我知道&lt;&gt;通常用于外部,但我发现它更清洁)

我怎样才能从项目的任何地方做到这一点?

3 个答案:

答案 0 :(得分:4)

您只需确保构建过程设置一个选项以指定搜索的起始点。

例如,如果您的标题位于:

/work/username/src/project/app/submodule/thing.h

然后你需要包括(假设符合POSIX的编译器; AFAICR,甚至MSVC使用/I作为-I的类似物):

-I/work/username/src

作为编译器选项之一。您可以从项目的任何位置使用该路径,因为它是绝对的。您只需要一个定义的方式让您的构建系统知道该设置应该是什么,这样当它移动到/home/someone/src/时,您只有一个设置可以更改。

答案 1 :(得分:1)

您可以简单地使用当前编译器的include目录选项(通常为-I)来实现此目的。

另请注意,使用""双引号只会添加到编译器标准标头的回退中。使用<>包含的文件只能保证从编译器标准头文件中搜索文件。

答案 2 :(得分:1)

有关两种格式之间的差异如何工作的更完整说明,请参阅this answer。但老实说,如果您需要跳过文件夹然后跳转到另一个文件夹来获取某些内容,我认为您可能需要考虑重新构建文件夹层次结构。一般来说,通常的做法是在文件夹结构中(即在同一文件夹中)将程序本地的所有文件保持在本地,并且可能需要所有非本地文件(例如头文件)所使用的库)在主程序文件夹中的子文件夹中,或者在编译时包含它们。

重要的是要注意,在我上面链接的答案中,它解释了“&lt;&gt;”包括是IMPLEMENTATION DEPENDENT,所以我们真的需要知道你使用什么编译器告诉你是否可以这样做。