C++ 我应该为我的项目使用相对include路径,还是将include目录放在include路径上?

C++ 我应该为我的项目使用相对include路径,还是将include目录放在include路径上?,c++,include,relative-path,convention,C++,Include,Relative Path,Convention,在我的项目中,我目前使用相对路径来包含我的文件,这是公认的不经常更改的。然而,它产生了非常奇怪的include模式,因为我通常将文件嵌套在很多文件夹中 例如,在我当前的项目中,我有network/server/myfile.hpp。它需要包括common/log.hpp。当前我使用的#包括“../../common/log.hpp”,虽然非常详细,但很有效 如果我改为在路径上添加我的主include目录,我可以简单地包含“common/log.hpp” P>我知道这个问题可能更多的是关于偏好,

在我的项目中,我目前使用相对路径来包含我的文件,这是公认的不经常更改的。然而,它产生了非常奇怪的include模式,因为我通常将文件嵌套在很多文件夹中

例如,在我当前的项目中,我有
network/server/myfile.hpp
。它需要包括
common/log.hpp
。当前我使用的
#包括“../../common/log.hpp”
,虽然非常详细,但很有效

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


<> P>我知道这个问题可能更多的是关于偏好,但是关于跨平台的应用有什么客观的利弊,C++的约定呢?

< P>我总是努力使我的项目不依赖于位置。如果我在一台新的计算机/平台上工作,我希望能够以最少的设置进行编译并继续工作。当你问一个主观的问题时,我的主观回答是我肯定更喜欢使用相对路径。

没有这样的约定,你可以用任何一种方式,你喜欢的方式

我是说,如果你想保持它整洁 不过显然是第二名 选择,我自己选择第二个 一个原因不是你必须这么做 移动一块巨石,但只移动几个文件, 说main


而且,相对路径为您提供了移植应用程序的自由,所以只需这样做:)

在源文件中包含
,在项目设置(编译器选项)中包含
common/log.hpp
如果
common/log.hpp
移动到其他地方,您将保护您的源代码不受更改,因此我建议使用这种方法。注意:在这种情况下使用尖括号-编译器应该在目录中搜索头,其中路径由
/I
编译器选项指定。

相对包含
路径。
中的路径看起来有点难看,并且需要特定的文件系统结构,即,
”。/../common/log.hpp“
是两个以上的文件夹。一般来说,避免不必要的依赖关系,特别是文件系统结构,这样将头文件从一个目录移动到另一个目录就不会强迫您更新包含该头文件的所有源文件

让您的include与名称空间和类相对应也很优雅。例如,如果您有:

namespace foo { namespace bar { struct Baz; } }
将其包括在内既方便又直观,如:

#include "foo/bar/Baz.h"

我有一条规则,每个单独的组件不能使用多个目录,并且该组件在include路径中有依赖组件的目录

因此,每个组件使用其自己的包含文件和
语法,而其他组件使用
包含,这很好地避免了一个组件使用头出现令人不快的意外情况,即安装到系统中的最后部署版本包含目录,而不是源代码树中的版本;它还具有很好的效果,迫使我在早期将项目组件化