我应该使用
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
)
或
{{1}}
有什么区别,如果有的话?我见过大多数“。”在现有代码中,但在互联网上搜索点有点困难......
答案 0 :(得分:6)
这两个用途生成几乎相同的输出,因为CMake跟踪当前目录并替换"的出现。"使用" $ {CMAKE_CURRENT_SOURCE_DIR} /."。唯一的区别是"。" variant具有额外的路径组件" /."追加。
无论你选择哪一个都是品味问题。
答案 1 :(得分:2)
在您的情况下,您可以考虑全局设置CMAKE_INCLUDE_CURRENT_DIR到ON
。
关于您的问题,答案主要取决于您自己的偏好。我更喜欢相对路径变体,以便您CMakeLists.txt
文件的可读性。
如果您在cmTargetIncludeDirectoriesCommand
::Join()和SystemTools::FileIsFullPath()查看CMake的源代码,您会发现CMake检查了以下条件 - 扩展变量后 - 如果它会将CMAKE_CURRENT_SOURCE_DIR
附加到包含路径:
\
或/
开头,第二个字符不 :
/
或~
结果是以下CMake代码
include_directories(.)
get_directory_property(_inc_dirs INCLUDE_DIRECTORIES)
message("_inc_dirs: ${_inc_dirs}")
将显示
_inc_dirs: [...your CMakeLists.txt path ...]/.
CMake的这种自动和绝对路径前缀行为是有意义的,因为可以 - 并且经常建议 - 在CMake中进行源外树构建(另请参阅CMake policy CMP0021)。
您可以考虑将CMAKE_USE_RELATIVE_PATHS设置为ON
,这会将生成构建环境期间的包含路径转换回相对于CMAKE_BINARY_DIR
目录的路径(但它仅适用于Makefile生成器)。
其他一些参考资料: