如何在不使用'..'的情况下包含与当前源文件不在同一目录下的C++头文件?

mat*_*xit 1 c++

例如:

工程/工具/ a.cpp

工程/工具/啊

是在此项目中随处使用的一批函数的实现文件和头文件.

现在,想象一下

项目/组件/ BH

想包括a.h.一个常见的解决方案是使用:

#include "../utility/a.h"

b.h.

谷歌C++风格不允许这样做:

所有项目的头文件都应该作为项目源目录的后代列出,而不使用UNIX目录快捷方式.(当前目录)或..(父目录).

我尝试将其包含在上面的文档中,但它不起作用.

那么我应该怎么做才能包含它而不使用'.' 要么 '..' ?

πάν*_*ῥεῖ 5

那么我应该怎么做才能包含它而不使用“。” 或者 '..' ?

-I您可以使用编译器的选项指定顶部包含目录的路径。


Jon*_*ler 5

另请参阅标题的相对路径有什么好处,例如"../include/header.h"?我应该用#include在头?

您需要决定是否仅使用头文件的基本名称(a.h在您的问题的缩写示例中),或者是否使用子目录和标题名称project/a.h).只要标题名称是唯一的,它们都是可行的; 通常,子目录版本通常更好,并且需要更少的命令行选项.

你可以写:

#ifndef B_H_INCLUDED
#define B_H_INCLUDED

#include "utility/a.h"

…other material required…

#endif /* B_H_INCLUDED */
Run Code Online (Sandbox Code Playgroud)

然后,在编译器命令行中,包含一个选项:

-I ..
Run Code Online (Sandbox Code Playgroud)

这确保了编译器会发现utility/a.h../utility/a.h(除非有一个名称冲突的地方).或者您可以指定项目的绝对路径:

-I /path/to/project
Run Code Online (Sandbox Code Playgroud)

会读/path/to/project/utility/a.h.