cmake - CMAKE_CURRENT_SOURCE_DIR 和 CMAKE_CURRENT_LIST_DIR 之间的区别

标签 cmake

来自维基百科:

CMAKE_CURRENT_SOURCE_DIR 这是当前处理的CMakeLists.txt所在的目录

CMAKE_CURRENT_LIST_DIR (自2.8.3起)这是当前正在处理的列表文件的目录。

来自文档:

CMAKE_CURRENT_SOURCE_DIR:当前正在处理的源目录的路径。 这是 cmake 当前正在处理的源目录的完整路径。

CMAKE_CURRENT_LIST_DIR:当前正在处理的列表文件的完整目录。 当 CMake 处理项目中的列表文件时,此变量将始终设置为当前正在处理的列表文件 (CMAKE_CURRENT_LIST_FILE) 所在的目录。该值具有动态范围。当 CMake 开始处理源文件中的命令时,它会将此变量设置为该文件所在的目录。当 CMake 完成处理文件中的命令时,它会恢复以前的值。因此,宏或函数内变量的值是调用调用堆栈上最底部条目的文件的目录,而不是包含宏或函数定义的文件的目录。

在什么情况下这些变量会持有不同的值?

最佳答案

变量CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_LIST_DIR可能会引用另一个带有 include 的文件包含的 CMake 列表文件的不同目录。命令。例如,如果 CMakeLists.txt 存在于目录 project 中并包含以下指令

include(src/CMakeLists.txt)

然后,在处理 src/CMakeLists.txt 时,CMAKE_CURRENT_LIST_DIR 将引用 project/src,而 CMAKE_CURRENT_SOURCE_DIR仍然指向外部目录project

当您需要查找位于当前正在处理的 CMakeLists.txt 文件旁边的资源文件(例如模板文件或批处理脚本)时,

CMAKE_CURRENT_LIST_DIR 会派上用场。

<小时/>

注意:当使用 add_subdirectory() 命令而不是 include() 时,行为是不同的,并且当 src/CMakeLists.txt 正在处理,两个变量都将指向 project/src

关于cmake - CMAKE_CURRENT_SOURCE_DIR 和 CMAKE_CURRENT_LIST_DIR 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15662497/

相关文章:

cmake - 为 cmake_minimum_required() 确定合适的版本

c++ - 无法在 CmakeList 中链接 Boost 库

cmake - 将 Boost 构建为 ExternalProject_Add 并使用 FindBoost 或导出结果

qt - 使用Qt Creator打开CMakeLists.txt,如何保存为.pro文件?

cmake add_custom_command 已经过时了

windows - MinGW-w64 找不到存在的 Makefile

java - cmake jar包无法执行: no main manifest attribute

linux - 处理器功能的 CMake 测试

c++ - cLion + Qt5 - 退出代码 -1073741515 (0xC0000135)

qt - Visual Studio + CMake + Qt Quick : how to debug QML files?