代码之家  ›  专栏  ›  技术社区  ›  Daniel Wolf deepee1

为什么二进制文件不放在CMAKE\u CURRENT\u BINARY\u DIR中?

  •  7
  • Daniel Wolf deepee1  · 技术社区  · 9 年前

    我的理解是 CMAKE_CURRENT_BINARY_DIR 应指向当前CmakeList的二进制文件所在的目录。将放置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}")
    

    #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\u CURRENT\u BINARY\u DIR=X:/dev/projects/CMakeTest/build

    为什么二进制文件不放在 CMAKE\u CURRENT\u BINARY\u DIR ,但在子目录中?有没有CMake变量告诉我子目录是什么?

    编辑:

    我不是想 放置二进制文件的目录。我正在努力 它原因是:

    install(FILES, ...) 命令,然后将这些文件添加到生成的包中。所以我需要传递二进制文件的实际路径 安装(文件,…) .

    2 回复  |  直到 9 年前
        1
  •  13
  •   Tsyvarev    9 年前

    变量 CMAKE_CURRENT_BINARY_DIR 处理 通常,这个目录及其子目录包含build 人工制品

    如果你想控制 在构建时,您需要设置变量 CMAKE_RUNTIME_OUTPUT_DIRECTORY .

    请注意 构建工具(如Visual Studio)将为每个特定配置创建子目录(称为配置本身) . 否则,为不同配置创建的可执行文件将覆盖它们自己。

    精确控制 CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG> . (而不是 < 应插入特定配置的名称,因此 CMAKE\u RUNTIME\u OUTPUT\u DIRECTORY\u调试 变量将影响 调试 构建)。


    对于只确定具有可执行文件的目录,请使用 $<TARGET_FILE_DIR:tgt> generator expression (而不是 tgt 应使用可执行文件创建的目标的名称)。

    请注意,生成器表达式只能在特定位置使用。E、 g.文件清单 install(FILES) 命令可以使用生成器表达式,但 message() 命令不能。

        2
  •  0
  •   annapan    5 年前

    是的,根据构建类型,可执行文件通常存储在低于CMAKE\u CURRENT\u BINARY\u DIR的级别。您可以使用${CMAKE\u BUILD\u TYPE}(通常具有Debug或Release值)直接导航到此目录,方法是构建完整路径,如: