CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的差异 [英] Difference between CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_LIST_DIR

查看:386
本文介绍了CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

CMAKE_CURRENT_SOURCE_DIR
这是当前处理的CMakeLists.txt所在的目录

CMAKE_CURRENT_SOURCE_DIR this is the directory where the currently processed CMakeLists.txt is located in

CMAKE_CURRENT_LIST_DIR
(自2.8.3起),这是当前正在处理的列表文件的目录。

CMAKE_CURRENT_LIST_DIR (since 2.8.3) this is the directory of the listfile currently being processed.

CMAKE_CURRENT_SOURCE_DIR:当前正在处理的源目录的路径。
这是cmake当前正在处理的源目录的完整路径。

CMAKE_CURRENT_SOURCE_DIR: The path to the source directory currently being processed. This the full path to the source directory that is currently being processed by cmake.

CMAKE_CURRENT_LIST_DIR:当前列表文件的完整目录正在处理。
在CMake处理项目中的列表文件时,此变量将始终设置为当前正在处理的列表文件(CMAKE_CURRENT_LIST_FILE)所在的目录。该值具有动态范围。当CMake开始处理源文件中的命令时,它将此变量设置为该文件所在的目录。当CMake完成文件中的命令处理后,它将恢复以前的值。因此,宏或函数中变量的值是调用调用堆栈最底部条目的文件的目录,而不是包含宏或函数定义的文件的目录。

CMAKE_CURRENT_LIST_DIR: Full directory of the listfile currently being processed. As CMake processes the listfiles in your project this variable will always be set to the directory where the listfile which is currently being processed (CMAKE_CURRENT_LIST_FILE) is located. The value has dynamic scope. When CMake starts processing commands in a source file it sets this variable to the directory where this file is located. When CMake finishes processing commands from the file it restores the previous value. Therefore the value of the variable inside a macro or function is the directory of the file invoking the bottom-most entry on the call stack, not the directory of the file containing the macro or function definition.

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

Under what circumstances would these variables hold different values?

推荐答案

变量 CMAKE_CURRENT_SOURCE_DIR CMAKE_CURRENT_LIST_DIR 可能引用了其他目录CMake列表文件,该文件由 include 命令包含在另一个文件中。例如,如果目录 project 中存在 CMakeLists.txt 并包含以下指令

The variables CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_LIST_DIR may refer to different directories for a CMake list file that is included by another file with the include command. E.g., if a CMakeLists.txt is present in a directory project and contains the following directive

include(src/CMakeLists.txt)

然后而 src / CMakeLists.txt 正在处理中 CMAKE_CURRENT_LIST_DIR 将引用 project / src ,而 CMAKE_CURRENT_SOURCE_DIR 仍指向外部目录 project

then while src/CMakeLists.txt is being processed CMAKE_CURRENT_LIST_DIR will refer to project/src whereas CMAKE_CURRENT_SOURCE_DIR still points to the outer directory project.

CMAKE_CURRENT_LIST_DIR 在您需要查找资源文件(如模板文件或批处理脚本)位于 CMakeLists.txt 当前正在处理的文件。

CMAKE_CURRENT_LIST_DIR comes in handy when you need to locate resource files like template files or batch scripts that are located next to the CMakeLists.txt file currently being processed.

注意:使用 add_subdirectory()时命令而不是 include(),其行为是不同的,并且在处理 src / CMakeLists.txt 时,两者变量将指向 project / src

Note: When using the add_subdirectory() command rather than include(), the behavior is different, and when src/CMakeLists.txt is being processed, both variables will point to project/src.

这篇关于CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆