CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR之间的差异 [英] Difference between CMAKE_CURRENT_SOURCE_DIR and 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 $ c $旁边时非常有用。 c>当前正在处理的文件。
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屋!