This page很好的总结了CMake已经给我们定义的变量,我感觉有些变量是一样的,比如CMAKE_SOURCE_DIR和PROJECT_SOURCE_DIR,都是一样的,都是指顶层CMakeLists.txt定义的文件夹,所以我的问题是:它们之间有细微差别吗?谢谢。
CMAKE_SOURCE_DIR
PROJECT_SOURCE_DIR
6tqwzwtp1#
这些变量之间 * 有 * 区别。CMAKE_SOURCE_DIR确实指的是定义顶级CMakeLists.txt的文件夹。但是,PROJECT_SOURCE_DIR指的是包含最新project()命令的CMakeLists.txt的文件夹。例如,假设您有一个名为Outer得顶级项目,它包含一个子目录,该子目录具有其自己得名为Inner得项目. Outer得CMakeLists.txt具有:
project()
Outer
Inner
project(Outer) add_subdirectory(Inner)
和Inner的值:
project(Inner)
那么在这两个CMakeLists文件中,CMAKE_SOURCE_DIR将引用Outer的源目录。但是,虽然Outer的PROJECT_SOURCE_DIR也是这个相同的目录,但Inner的情况不是这样。Inner的PROJECT_SOURCE_DIR是包含其CMakeLists.txt的子目录。此差异适用于所有PROJECT_<var>与CMAKE_<var>变量。
PROJECT_<var>
CMAKE_<var>
sy5wg1nm2#
随着弗雷泽的精彩回答。就是the build directory being processed。假设您有一个名为Inner1的目录,其中包含一个CMakeLists.txt文件,但没有在其中调用project。那么PROJECT_SOURCE_DIR没有设置为Inner1的目录路径,但在处理时设置了CMAKE_CURRENT_SOURCE_DIR。您可能还会发现CMAKE_CURRENT_LIST_DIR很有趣,而listfile的定义很有用。
the build directory being processed
Inner1
project
CMAKE_CURRENT_SOURCE_DIR
2条答案
按热度按时间6tqwzwtp1#
这些变量之间 * 有 * 区别。
CMAKE_SOURCE_DIR
确实指的是定义顶级CMakeLists.txt的文件夹。但是,PROJECT_SOURCE_DIR
指的是包含最新project()
命令的CMakeLists.txt的文件夹。例如,假设您有一个名为
Outer
得顶级项目,它包含一个子目录,该子目录具有其自己得名为Inner
得项目.Outer
得CMakeLists.txt具有:和
Inner
的值:那么在这两个CMakeLists文件中,
CMAKE_SOURCE_DIR
将引用Outer
的源目录。但是,虽然Outer
的PROJECT_SOURCE_DIR
也是这个相同的目录,但Inner
的情况不是这样。Inner
的PROJECT_SOURCE_DIR
是包含其CMakeLists.txt的子目录。此差异适用于所有
PROJECT_<var>
与CMAKE_<var>
变量。sy5wg1nm2#
随着弗雷泽的精彩回答。
就是
the build directory being processed
。假设您有一个名为
Inner1
的目录,其中包含一个CMakeLists.txt文件,但没有在其中调用project
。那么PROJECT_SOURCE_DIR
没有设置为Inner1
的目录路径,但在处理时设置了CMAKE_CURRENT_SOURCE_DIR
。您可能还会发现CMAKE_CURRENT_LIST_DIR很有趣,而listfile的定义很有用。