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