首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMAKE_CURRENT_SOURCE_DIR与CMAKE_CURRENT_LIST_DIR的区别

CMAKE_CURRENT_SOURCE_DIR与CMAKE_CURRENT_LIST_DIR的区别
EN

Stack Overflow用户
提问于 2013-03-27 15:18:41
回答 1查看 90.1K关注 0票数 155

维基百科:

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完成从文件中处理命令时,它将恢复以前的值。因此,宏或函数中变量的值是调用堆栈中最底层条目的文件的目录,而不是包含宏或函数定义的文件的目录。

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

EN

回答 1

Stack Overflow用户

发布于 2021-05-17 10:59:48

定义

CMAKE_SOURCE_DIR:包含CMakeList.txt文件的最顶层文件夹(源目录)。这个值在不同的作用域中永远不会改变。

PROJECT_SOURCE_DIR:包含CMakeList.txt文件的最近的文件夹,它有自己的作用域,包含project()命令。

CMAKE_CURRENT_SOURCE_DIR:包含具有自己范围的CMakeList.txt文件的最近的文件夹。(文件不需要包含project()命令)

CMAKE_CURRENT_LIST_DIR:包含当前已处理的CMakeList.txt或.cmake文件的文件夹。

我的意思是它本身的范围与范围规则有关。虽然include(file)命令没有创建新的作用域,但是add_subdirectory正在创建一个影响PROJECT_SOURCE_DIR和CMAKE_CURRENT_SOURCE_DIR值的新范围。

示例

让项目结构如下:

代码语言:javascript
运行
复制
A/
=> CMakeList.txt
=> B/
   => CMakeList.txt

让我们假设通过将消息命令放入子文件夹B中的CMakeList.txt文件来打印所有cmake变量。

  • 如果文件夹A中的CMakeList.txt包含一个包含(“B/CMakeList.txt”)行,那么

CMAKE_SOURCE_DIR将是源目录,即“到项目/A的路径”。

PROJECT_SOURCE_DIR将是“到项目/ A的路径”,因为CMakeList.txt命令不会创建新的作用域,而且最近的CMakeList.txt文件具有自己的作用域并包含项目命令,位于文件夹A中。

CMAKE_CURRENT_SOURCE_DIR将是“到项目/ A的路径”,因为CMakeList.txt命令不会创建新的作用域,而且离它最近的具有自己范围的CMakeList.txt文件位于文件夹A中。

CMAKE_CURRENT_LIST_DIR将是“项目/A/ B的路径”,因为当前处理的文件位于子文件夹B中。

  • 如果CMakeList.txt包含一行add_subdirectory("./B"),那么

CMAKE_SOURCE_DIR将是源目录,即“到项目/A的路径”。

PROJECT_SOURCE_DIR将是“到项目/A/ B的路径”,因为add_subdirectory命令创建了一个新的作用域,并且最近的CMakeList.txt文件有它自己的作用域并包含项目命令在子文件夹B中。

CMAKE_CURRENT_SOURCE_DIR将是“到项目/A/ B的路径”,因为add_subdirectory命令创建了一个新的作用域,并且最接近的具有自己范围的CMakeList.txt文件位于子文件夹B中。

CMAKE_CURRENT_LIST_DIR将是“项目/A/ B的路径”,因为当前处理的文件位于子文件夹B中。

参考https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/Useful-Variables

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15662497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档