来自维基百科:
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_DIR
和 CMAKE_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/