Compilation CMAKE\u当前\u二进制\u目录返回错误的目录
我有以下文件夹结构:Compilation CMAKE\u当前\u二进制\u目录返回错误的目录,compilation,cmake,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_BIN
- 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
Root目录:/home//SomeApp/cmake构建调试
Protobuf Dir:/home//SomeApp/cmake build debug
根据,实际输出应为:
Root Dir: /home/<...>/SomeApp/
Protobuf Dir: /home/<...>/SomeApp/protobuf/
Root目录:/home//SomeApp/
Protobuf Dir:/home//SomeApp/Protobuf/
我的cmake设置出了什么问题?在您的例子中,变量
cmake\u CURRENT\u BINARY\u DIR
显示生成目录的子目录的路径cmake\u BINARY\u DIR
假设您的代码位于/home/myname/SomeApp
中,并且您的代码位于兄弟文件夹/home/myname/cmake build debug
中
的值是CMAKE\u BINARY\u DIR
李>/home/myname/CMAKE build debug
的值是CMAKE\u CURRENT\u BINARY\u DIR
李>/home/myname/CMAKE build debug
- 在这种情况下,
等于CMAKE\u CURRENT\u BINARY\u DIR
CMAKE\u CURRENT\u DIR
unittests
中有一个CMakeLists.txt
是CMAKE\u BINARY\u DIR
/home/myname/CMAKE build debug
CMAKE\u CURRENT\u BINARY\u DIR
/home/myname/cmake build debug/unittests
cd /home/myname/SomeApp
cd ..
mkdir cmake-build-debug
cmake ../SomeApp
make
在本例中,变量
CMAKE\u CURRENT\u BINARY\u DIR
显示生成目录CMAKE\u BINARY\u DIR
的子目录路径
假设您的代码位于/home/myname/SomeApp
中,并且您的代码位于兄弟文件夹/home/myname/cmake build debug
中
的值是CMAKE\u BINARY\u DIR
李>/home/myname/CMAKE build debug
的值是CMAKE\u CURRENT\u BINARY\u DIR
李>/home/myname/CMAKE build debug
- 在这种情况下,
等于CMAKE\u CURRENT\u BINARY\u DIR
CMAKE\u CURRENT\u DIR
unittests
中有一个CMakeLists.txt
是CMAKE\u BINARY\u DIR
/home/myname/CMAKE build debug
CMAKE\u CURRENT\u BINARY\u DIR
/home/myname/cmake build debug/unittests
cd /home/myname/SomeApp
cd ..
mkdir cmake-build-debug
cmake ../SomeApp
make
您确定输出不是Protobuf Dir:/home//SomeApp/cmake build debug/Protobuf吗?如果没有后续的protobuf,我会感到困惑。cmake-build-debug是您的构建目录。所有内容都放在那里,当前的二进制目录总是在build目录下。我不确定您是否了解这一点,也不确定这是否是您问题的一部分(搜索源代码外构建以获取更多信息),我已经给了您的示例一次尝试,并按照预期获得根目录:…/SomeApp/cmake build debug和
Protobuf Dir:…/SomeApp/cmake build debug/Protobuf
。因此,对于给定的示例,您的问题无法重现,并且肯定缺少了一些关键的内容。您确定输出不是Protobuf Dir:/home//SomeApp/cmake build debug/Protobuf吗?如果没有后续的protobuf,我会感到困惑。cmake-build-debug是您的构建目录。所有内容都放在那里,当前的二进制目录总是在build目录下。我不确定您是否了解这一点,也不确定这是否是您问题的一部分(搜索源代码外构建以获取更多信息),我已经给了您的示例一次尝试,并按照预期获得根目录:…/SomeApp/cmake build debug和Protobuf Dir:…/SomeApp/cmake build debug/Protobuf
。因此,在给定的示例中,您的问题无法重现,并且肯定缺少了一些关键的东西。我猜您错配了CMAKE\u BINARY\u DIR
和CMAKE\u CURRENT\u BINARY\u DIR
我猜您错配了CMAKE\u BINARY\u DIR