gpt4 book ai didi

cmake - CMAKE_CURRENT_SOURCE_DIR 和 CMAKE_CURRENT_LIST_DIR 之间的区别

转载 作者:行者123 更新时间:2023-12-03 05:09:59 25 4
gpt4 key购买 nike

来自维基百科:

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_DIRCMAKE_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com