我有以下文件夹结构:
- 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设置出了什么问题?
答案 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