CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的区别
从Wiki:
CMAKE_CURRENT_SOURCE_DIR这是当前处理的CMakeLists.txt所在的目录
CMAKE_CURRENT_LIST_DIR (自2.8.3开始)这是当前正在处理的列表文件的目录。
从文档:
CMAKE_CURRENT_SOURCE_DIR:当前正在处理的源目录的path。 这是cmake正在处理的源目录的完整path。
CMAKE_CURRENT_LIST_DIR:当前正在处理的列表文件的完整目录。 当CMake处理项目中的列表文件时,此variables将始终设置为当前正在处理的列表文件(CMAKE_CURRENT_LIST_FILE)所在的目录。 该值具有dynamic范围。 当CMake开始处理源文件中的命令时,它将此variables设置为该文件所在的目录。 当CMake完成处理来自文件的命令时,它恢复以前的值。 因此,macros或函数中variables的值是调用调用堆栈最底层条目的文件的目录,而不是包含macros或函数定义的文件的目录。
这些variables在什么情况下会有不同的值?
variablesCMAKE_CURRENT_SOURCE_DIR
和CMAKE_CURRENT_LIST_DIR
可能引用不同目录中的一个CMake列表文件,这个文件被include命令包含在不同的文件中。 例如,如果CMakeLists.txt
存在于目录project
并包含以下指令
include(src/CMakeLists.txt)
那么在处理src/CMakeLists.txt
, CMAKE_CURRENT_LIST_DIR
将引用project/src
而CMAKE_CURRENT_SOURCE_DIR
仍然指向外部目录project
。
CMAKE_CURRENT_LIST_DIR
在您需要查找资源文件(如当前正在处理的CMakeLists.txt
文件旁边的模板文件或批处理脚本)时派上用场。