我的理解CMAKE_CURRENT_BINARY_DIR应该指向当前CMakeLists.txt文件的二进制文件所在的目录。但是,事实并非如此。
考虑以下文件结构:
CMakeTest
+- CMakeLists.txt
+- main.cpp
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt
cmake_minimum_required(VERSION 3.2)
add_executable(CMakeTest main.cpp)
message(STATUS "CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
Run Code Online (Sandbox Code Playgroud)
main.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在(Windows)命令行上,我运行以下命令:
md build
cd build
cmake .. -G "Visual Studio 14 2015"
cmake --build .
Run Code Online (Sandbox Code Playgroud)
第一条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, ...)。
变量CMAKE_CURRENT_BINARY_DIR表示CMake的“ 当前正在处理的二进制目录”。通常,此目录及其子目录包含构建工件,例如可执行文件,库或其他生成的文件。
如果要控制正在生成的可执行文件的位置,则需要设置变量CMAKE_RUNTIME_OUTPUT_DIRECTORY。
请注意,这多配置生成工具,如Visual Studio,对于每一个特定的配置将创建子目录(命名为配置本身)下CMAKE_RUNTIME_OUTPUT_DIRECTORY。否则,为不同配置创建的可执行文件将覆盖自己。
为了精确控制用于生成的可执行文件的每个配置目录,请使用变量CMAKE_RUNTIME_OUTPUT_DIRECTORY_ <CONFIG>。(而不是应插入特定配置的<CONFIG>名称,因此CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG变量将影响Debug版本)。
对于仅确定具有可执行文件的目录,请使用$<TARGET_FILE_DIR:tgt> 生成器表达式(而不是使用tgt创建的目标名称,而应使用可执行文件)。
请注意,生成器表达式只能在特定位置使用。例如,用于install(FILES)命令的文件列表可以使用生成器表达式,但是message()命令不能。
| 归档时间: |
|
| 查看次数: |
3143 次 |
| 最近记录: |