Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMAKE中的CMAKE\U SOURCE\U DIR和PROJECT\U SOURCE\U DIR是否相同?_Cmake - Fatal编程技术网

CMAKE中的CMAKE\U SOURCE\U DIR和PROJECT\U SOURCE\U DIR是否相同?

CMAKE中的CMAKE\U SOURCE\U DIR和PROJECT\U SOURCE\U DIR是否相同?,cmake,Cmake,包含CMake已经为我们定义的变量的良好摘要。我觉得有些变量是一样的。以CMAKE\u SOURCE\u DIR和PROJECT\u SOURCE\u DIR为例。它们是相同的,指的是定义顶级CMakeLists.txt的文件夹。所以我的问题是:它们之间有细微的区别吗?谢谢 这些变量之间存在差异。确实指的是定义顶级CMakeLists.txt的文件夹。但是,是指包含最新的project()命令的CMakeLists.txt文件夹 例如,假设您有一个名为Outer的顶级项目,其中包含一个子目录,该

包含CMake已经为我们定义的变量的良好摘要。我觉得有些变量是一样的。以
CMAKE\u SOURCE\u DIR
PROJECT\u SOURCE\u DIR
为例。它们是相同的,指的是定义顶级CMakeLists.txt的文件夹。所以我的问题是:它们之间有细微的区别吗?谢谢

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

例如,假设您有一个名为
Outer
的顶级项目,其中包含一个子目录,该子目录具有自己的名为
internal
的项目<代码>外部的CMakeLists.txt具有:

project(Outer)
add_subdirectory(Inner)
内部

project(Inner)
然后在这两个CMakeLists文件中,
CMAKE\u SOURCE\u DIR
将引用
Outer
的SOURCE DIR。但是,虽然
外部
PROJECT\u SOURCE\u DIR
也是同一个DIR,但
内部
的情况并非如此
internal
PROJECT\u SOURCE\u DIR
是包含其CMakeLists.txt的子目录


这种差异适用于所有
项目
CMAKE
变量。

遵循弗雷泽的优秀答案

是正在处理的生成目录

假设您有一个名为
Inner1
的目录,其中包含一个CMakeLists.txt文件,而没有在其中调用
project
。然后,
PROJECT\u SOURCE\u DIR
不使用
Inner1
的DIR路径设置,而是在处理时设置
CMAKE\u CURRENT\u SOURCE\u DIR


您可能也会发现有趣和有用的定义。

您是否也可以添加与
CMAKE\u CURRENT\u SOURCE\u DIR
的区别?因此(在单个CMakeLists.txt项目中)将其放在子目录(比如CMAKE)中不是一个好主意?