【问题标题】:CMAKE_CURRENT_BINARY_DIR returning the wrong directoryCMAKE_CURRENT_BINARY_DIR 返回错误的目录
【发布时间】:2018-01-06 22:43:02
【问题描述】:

我有以下文件夹结构:

- SomeApp
  * CMakeLists.txt
  * source.cpp
  - cmake-build-debug
  - protobuf
    * CMakeLists.txt
    * file.proto

在我的根 CMakeLists.txt 文件中写入:

cmake_minimum_required(VERSION 3.9)
project(SomeApp)

message("Root Dir: ${CMAKE_CURRENT_BINARY_DIR}")

ADD_SUBDIRECTORY(protobuf)

在我的 ./protobuf/ 中,CMakeLists.txt 是为了测试刚刚写的:

message("Protobuf Dir: ${CMAKE_CURRENT_BINARY_DIR}")

在编译过程中,我得到了输出:

Root Dir: /home/<...>/SomeApp/cmake-build-debug
Protobuf Dir: /home/<...>/SomeApp/cmake-build-debug

根据https://cmake.org/cmake/help/v3.0/variable/CMAKE_CURRENT_BINARY_DIR.html,实际输出应该是:

Root Dir: /home/<...>/SomeApp/
Protobuf Dir: /home/<...>/SomeApp/protobuf/

我的 cmake 设置出了什么问题?

【问题讨论】:

  • 你确定输出不是 Protobuf Dir: /home/<...>/SomeApp/cmake-build-debug/protobuf?如果没有尾随的 protobuf,我会感到困惑。
  • cmake-build-debug 是你的构建目录。一切都放在那里,当前的二进制目录总是在构建目录之下。我不确定你是否得到这个或者是否是你问题的一部分(搜索外源构建以获取更多信息)
  • 我已经给你的例子一个尝试并得到 - 正如预期的那样 - Root Dir: .../SomeApp/cmake-build-debugProtobuf Dir: .../SomeApp/cmake-build-debug/protobuf。因此,对于给定的示例,您的问题无法重现,并且肯定缺少关键的东西。

标签: compilation cmake


【解决方案1】:

在您的情况下,变量 CMAKE_CURRENT_BINARY_DIR 显示构建目录 CMAKE_BINARY_DIR 的子目录的路径。

假设您的代码在 /home/myname/SomeApp 中,而您在兄弟文件夹 /home/myname/cmake-build-debug 中。

  • CMAKE_BINARY_DIR 的值为/home/myname/cmake-build-debug
  • CMAKE_CURRENT_BINARY_DIR 的值为/home/myname/cmake-build-debug
  • 在这种情况下,CMAKE_CURRENT_BINARY_DIR 等于 CMAKE_CURRENT_DIR

扩展示例: 您在子文件夹 unittests 中有一个 CMakeLists.txt。

  • CMAKE_BINARY_DIR/home/myname/cmake-build-debug
  • CMAKE_CURRENT_BINARY_DIR/home/myname/cmake-build-debug/unittests

在 Linux 上,您可以执行以下命令来查看:

cd /home/myname/SomeApp
cd ..
mkdir cmake-build-debug
cmake ../SomeApp
make

【讨论】:

  • 我猜你不匹配 CMAKE_BINARY_DIRCMAKE_CURRENT_BINARY_DIR
猜你喜欢
  • 2011-09-24
  • 2014-03-14
  • 2018-02-06
  • 2020-08-16
  • 2011-10-05
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多