This page包含了CMake已经为我们定义的变量的一个很好的总结。我觉得有些变数是一样的。以CMAKE_SOURCE_DIR
和PROJECT_SOURCE_DIR
为例。它们是相同的,指的是定义顶级CMakeLists.txt的文件夹。所以我的问题是:它们之间有细微差别吗?谢谢。
答案 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_DIR
与PROJECT_<var>
变量。
答案 1 :(得分:3)
遵循弗雷泽的出色答案。
CMAKE_CURRENT_SOURCE_DIR是the build directory being processed
。
比方说,您有一个名为Inner1
的目录,其中包含CMakeLists.txt文件,而没有在其中调用project
。然后,PROJECT_SOURCE_DIR
未设置为Inner1
的目录路径,但是在处理时设置了CMAKE_CURRENT_SOURCE_DIR
。
您可能还会发现CMAKE_CURRENT_LIST_DIR很有趣,而listfile的定义很有用。