CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR的区别

2019-07-28 12:10发布

从维基:

CMAKE_CURRENT_SOURCE_DIR这就是当前处理的CMakeLists.txt位于目录

CMAKE_CURRENT_LIST_DIR(自2.8.3),这是当前正在处理的listfile中的目录。

从文档:

CMAKE_CURRENT_SOURCE_DIR:到源目录的路径当前正被处理。 这的完整路径当前正由cmake的处理的源目录。

CMAKE_CURRENT_LIST_DIR:在listfile中的完整目录正在处理中。 随着CMake的项目中的处理listfiles这个变量将始终设置到当前正在处理的listfile中(CMAKE_CURRENT_LIST_FILE)所在的目录。 该值具有的动态范围。 当CMake的在源文件中的处理开始命令它设置此变量,其中该文件位于的目录。 当CMake的从文件完成处理命令它恢复以前的值。 因此宏或功能内的变量的值是文件调用的调用堆栈上最底部入口,包含宏或函数定义的文件不是目录的目录。

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

Answer 1:

变量CMAKE_CURRENT_SOURCE_DIRCMAKE_CURRENT_LIST_DIR可以指不同的目录中由与另一个文件包含一个CMake的列表文件中包含的命令。 例如,如果一个CMakeLists.txt存在于目录中project ,包含下面的指令

include(src/CMakeLists.txt)

然后一边src/CMakeLists.txt正在处理CMAKE_CURRENT_LIST_DIR将指project/srcCMAKE_CURRENT_SOURCE_DIR仍然指向外目录project

CMAKE_CURRENT_LIST_DIR就派上用场了,当你需要找到像被旁边的模板文件或批处理脚本资源文件CMakeLists.txt目前正在处理的文件。



文章来源: Difference between CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_LIST_DIR
标签: cmake