在CMake,CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR有什么区别? [英] In CMake, What is the difference between CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_LIST_DIR?

查看:2043
本文介绍了在CMake,CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从维基:



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



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

解决方案 c> CMAKE_CURRENT_SOURCE_DIR 和 CMAKE_CURRENT_LIST_DIR 可能指向不同文件包含的CMake列表文件的不同目录www.cmake.org/cmake/help/v2.8.10/cmake.html#command%3ainclude\"> include 命令。例如,如果 CMakeLists.txt 存在于项目中,并包含以下指令

  include(src / CMakeLists.txt)

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



CMAKE_CURRENT_LIST_DIR 可以派上用场,当您需要找到资源文件,如模板文件或批处理脚本,位于 CMakeLists.txt 当前正在处理的文件。


From the Wiki:

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

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

From the Docs:

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: 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?

解决方案

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 a different 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)

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 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.

这篇关于在CMake,CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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