Cake中的CMAKE_SOURCE_DIR和PROJECT_SOURCE_DIR是一样的吗?

时间:2015-08-15 19:45:36

标签: cmake

This page包含了CMake已经为我们定义的变量的一个很好的总结。我觉得有些变数是一样的。以CMAKE_SOURCE_DIRPROJECT_SOURCE_DIR为例。它们是相同的,指的是定义顶级CMakeLists.txt的文件夹。所以我的问题是:它们之间有细微差别吗?谢谢。

2 个答案:

答案 0 :(得分:58)

这些变量之间的差异。 CMAKE_SOURCE_DIR确实引用了定义顶级CMakeLists.txt的文件夹。但是,PROJECT_SOURCE_DIR是指包含最新project()命令的CMakeLists.txt的文件夹。

例如,假设您有一个名为Outer的顶级项目,其中包含一个名为Inner的项目的子目录。 Outer的CMakeLists.txt包含:

project(Outer)
add_subdirectory(Inner)

Inner' s:

project(Inner)

然后,在这两个CMakeLists文件中,CMAKE_SOURCE_DIR将引用Outer的源目录。但是,PROJECT_SOURCE_DIR的{​​{1}}也是同一个目录,Outer的情况并非如此。 Inner' s Inner是包含其CMakeLists.txt的子目录。

此差异适用于所有PROJECT_SOURCE_DIRPROJECT_<var>变量。

答案 1 :(得分:3)

遵循弗雷泽的出色答案。

CMAKE_CURRENT_SOURCE_DIRthe build directory being processed

比方说,您有一个名为Inner1的目录,其中包含CMakeLists.txt文件,而没有在其中调用project。然后,PROJECT_SOURCE_DIR未设置为Inner1的目录路径,但是在处理时设置了CMAKE_CURRENT_SOURCE_DIR

您可能还会发现CMAKE_CURRENT_LIST_DIR很有趣,而listfile的定义很有用。