【发布时间】:2017-09-22 18:33:30
【问题描述】:
据我了解,CMAKE_CURRENT_BINARY_DIR 应指向当前 CMakeLists.txt 文件的二进制文件所在的目录。然而,情况似乎并非如此。
考虑这个文件结构:
CMakeTest
+- CMakeLists.txt
+- main.cpp
CMakeLists.txt
cmake_minimum_required(VERSION 3.2)
add_executable(CMakeTest main.cpp)
message(STATUS "CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
main.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!";
return 0;
}
在 (Windows) 命令行上,我运行以下命令:
md build
cd build
cmake .. -G "Visual Studio 14 2015"
cmake --build .
第一个cmake 命令打印(除其他外)该行
CMAKE_CURRENT_BINARY_DIR = X:/dev/projects/CMakeTest/build
所以我希望生成的二进制文件 CMakeTest.exe 会在那里结束。但实际上,它位于 X:/dev/projects/CMakeTest/build/Debug 中。
为什么二进制文件没有放在CMAKE_CURRENT_BINARY_DIR,而是放在一个子目录中?是否有任何 CMake 变量可以告诉我该子目录是什么?
编辑:
我不想更改二进制文件所在的目录。我正在尝试确定它。原因是这样的:
在构建期间,会在与可执行文件相同的目录中创建许多附加资源文件。 (这部分有效。)我想使用install(FILES, ...) 命令将这些文件添加到生成的包中。所以我需要将放置二进制文件的实际路径传递给install(FILES, ...)。
【问题讨论】:
-
我猜,这是MSVC生成器的一个缺点。
-
我相信这是一件好事。我的意思是调试和发布可执行文件不兼容,并且可能命名相同,最好将它们保存在单独的文件夹中。请记住,在 MSVC 中,默认情况下您有 4 种配置。
-
@arrowd:这似乎不是生成器问题。在 OS X 上使用
Xcode生成器具有相同的结果。 -
并使用
Unix Makefiles? -
@drescherjm:我并不是说子目录是一件坏事。我只是在问如何找出二进制文件的实际去向。