CMake中的CMAKE_SOURCE_DIR和PROJECT_SOURCE_DIR是否相同?

euoag5mw  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(795)

This page很好的总结了CMake已经给我们定义的变量,我感觉有些变量是一样的,比如CMAKE_SOURCE_DIRPROJECT_SOURCE_DIR,都是一样的,都是指顶层CMakeLists.txt定义的文件夹,所以我的问题是:它们之间有细微差别吗?谢谢。

6tqwzwtp

6tqwzwtp1#

这些变量之间 * 有 * 区别。CMAKE_SOURCE_DIR确实指的是定义顶级CMakeLists.txt的文件夹。但是,PROJECT_SOURCE_DIR指的是包含最新project()命令的CMakeLists.txt的文件夹。
例如,假设您有一个名为Outer得顶级项目,它包含一个子目录,该子目录具有其自己得名为Inner得项目. Outer得CMakeLists.txt具有:

project(Outer)
add_subdirectory(Inner)

Inner的值:

project(Inner)

那么在这两个CMakeLists文件中,CMAKE_SOURCE_DIR将引用Outer的源目录。但是,虽然OuterPROJECT_SOURCE_DIR也是这个相同的目录,但Inner的情况不是这样。InnerPROJECT_SOURCE_DIR是包含其CMakeLists.txt的子目录。
此差异适用于所有PROJECT_<var>CMAKE_<var>变量。

sy5wg1nm

sy5wg1nm2#

随着弗雷泽的精彩回答。
就是the build directory being processed
假设您有一个名为Inner1的目录,其中包含一个CMakeLists.txt文件,但没有在其中调用project。那么PROJECT_SOURCE_DIR没有设置为Inner1的目录路径,但在处理时设置了CMAKE_CURRENT_SOURCE_DIR
您可能还会发现CMAKE_CURRENT_LIST_DIR很有趣,而listfile的定义很有用。

相关问题