CMAKE_SOURCE_DIR在哪里?

pat*_*ork 10 cmake

此变量是否始终设置为包含CMakeLists.txt我运行的文件的目录cmake

例如,如果我希望运行cmakeCMakeLists.txt当前目录上方的目录中的文件,我会去:cmake ...

在这种情况下,我的CMAKE_SOURCE_DIR设置为什么?

use*_*710 11

假设你有2个文件夹srcbuild其中src包含您的项目,build就是你刚刚创建,以便您可以部署外的树上建在它的空文件夹:CMAKE_SOURCE_DIR是通向src哪里CMAKE_BINARY_DIRbuild.

请注意,如果您正在进行树内构建,则2个缓存条目将获得相同的值.

链接:CMake有用的变量.


编辑

进一步澄清

<some location>/src/CMakeLists.txt ( so *src* is the root of your project )
<some location>/build
Run Code Online (Sandbox Code Playgroud)

如果你做的事情

cd <some location>/build
cmake <some location>/src
Run Code Online (Sandbox Code Playgroud)

你正在构建一个树外构建,CMAKE_SOURCE_DIRCMAKE_BINARY_DIR获得不同的值

  • 谢谢你的回复。但不幸的是,我不明白这个答案与我上面的问题有何关系。但是,我可能会遗漏一些基本信息。 (3认同)
  • @patchwork 你知道什么是树外构建吗?当您在不是原始源文件夹的文件夹中配置和构建项目时,因此当您说在源树中使用“cmake ..”时,您正在执行树外构建。 (2认同)
  • 您的答案是否暗示“CMAKE_BINARY_DIR”是我第一次运行“cmake”命令的文件夹?(在您的示例中,“&lt;some location&gt;/build”文件夹...) (2认同)
  • @patchwork 是的,我也不确定 cmake 发生了什么,但您是对的,当您第一次运行它时,它确实将 CMAKE_BINARY_DIR 设置为您的密码。所以,如果你的 src 都在 /opt/src/myproject 并且你有 /opt/src/myproject/CMakeFiles.txt,那么如果你 cd /tmp/build/debug 并输入 cmake /opt/src/myproject,你会发现 CMAKE_BINARY_DIR=/tmp/build/debug (2认同)