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
在Linux上,您可以执行以下命令来查看:

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
在Linux上,您可以执行以下命令来查看:

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