在将自己定位到开源C ++项目之一的过程中,我在根CMakeLists.txt文件中找到了一行代码:
include_directories(${PROJECT_SOURCE_DIR}/../include)
然后在其中一个源文件中有这一行:
#include "someFolder/someFile.h"
someFolder
位于include
文件夹中。
我在另一个项目中看到过不同的方法, 其中CMakeLists.txt有这样的东西:
include_directories(${PROJECT_SOURCE_DIR}/../include/someFolder)
然后在源文件中:
#include "someFile.h"
我发现第二种方法比第一种方法更清洁。哪两个是正确的方法还是最佳实践?
答案 0 :(得分:3)
我更喜欢包含文件的子目录。
这样做的主要原因是避免文件名冲突。如果依赖项A
有一个名为someFile.h
的文件,而依赖项B
也有一个名为someFile.h
的文件,则会出现问题,因为编译器不知道哪个一个要包括。
因此,出于同样的原因,你应该使用命名空间,你应该尽可能使用包含文件的子目录。
答案 1 :(得分:0)
嗯,在我看来,这是非常基于意见的......
我更喜欢前一种方法,特别是对于较大的库。它展示了作者所希望的库的逻辑结构。