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_DIRCMAKE_CURRENT_LIST_DIR可能引用不同目录中的一个CMake列表文件,这个文件被include命令包含在不同的文件中。 例如,如果CMakeLists.txt存在于目录project并包含以下指令

 include(src/CMakeLists.txt) 

那么在处理src/CMakeLists.txtCMAKE_CURRENT_LIST_DIR将引用project/srcCMAKE_CURRENT_SOURCE_DIR仍然指向外部目录project

CMAKE_CURRENT_LIST_DIR在您需要查找资源文件(如当前正在处理的CMakeLists.txt文件旁边的模板文件或批处理脚本)时派上用场。