我应该为项目使用相对包含路径,还是将include-directory放在包含路径上?

Max*_*Max 15 c++ convention relative-path include

在我的项目中,我目前使用相对路径来包含我的文件,这些文件肯定不会经常更改.但是,它会产生非常奇怪的包含模式,因为我通常将我的文件嵌套在很多文件夹中.

例如,在我目前的项目中network/server/myfile.hpp.它需要包括common/log.hpp.目前我使用的#include "../../common/log.hpp"是非常详细,但有效.

如果我改为在路径上添加我的主要包含目录,我可以简单地包括"common/log.hpp".

我知道这个问题可能更多是关于偏好而不是其他任何问题,但是关于跨平台应用程序有什么客观的利弊,那么C++约定呢?

Max*_*kin 12

相对包含其中的路径..看起来有点难看,并期望某个文件系统结构,即"../../common/log.hpp"两个文件夹.有意义的是,通常避免不必要的依赖关系,尤其是文件系统结构,因此将头文件从一个目录移动到另一个目录不会强制您更新包含该头的所有源文件.

使包含对应于命名空间和类也很优雅.例如,如果你有:

namespace foo { namespace bar { struct Baz; } }
Run Code Online (Sandbox Code Playgroud)

包含它是方便和直观的:

#include "foo/bar/Baz.h"
Run Code Online (Sandbox Code Playgroud)


Boj*_*zec 5

通过#include <common/log.hpp>在源文件中拥有并common/log.hpp在项目设置中有路径(编译器选项),您可以保护源代码免受更改,以防common/log.hpp移动到其他位置,因此我建议使用此方法.注意在这种情况下使用尖括号 - 编译器应该在目录中搜索哪个路径由/I编译器选项指定.