CMAKE_CURRENT_BINARY_DIR返回错误的目录

时间:2018-01-06 22:43:02

标签: compilation cmake

我有以下文件夹结构:

- 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设置出了什么问题?

1 个答案:

答案 0 :(得分:0)

变量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