【问题标题】:Compile sources in `src` directory to binaries in `bin` directory with CMake使用 CMake 将 `src` 目录中的源代码编译为 `bin` 目录中的二进制文件
【发布时间】:2012-06-14 06:29:07
【问题描述】:

我的项目目录包含一个CMakeLists.txt 文件以及其根目录下的srcinclude 目录。 src 还包含它自己的CMakeLists.txt,它由根处的那个链接。有没有办法可以指定 CMake 设置默认的全局构建目录,以便 src/CMakeLists.txt 中的语法接近以下?

include_directories(include)
add_executable(first main.cpp foo.cpp)
add_executable(second bar.cpp)

我想建立这个目录树:

CMakeLists.txt

src/
    CMakeLists.txt
    main.cpp
    foo.cpp
    bar.cpp

include/
    ...

bin/ (or build/)
    first
    second

【问题讨论】:

    标签: cmake


    【解决方案1】:

    你可以设置CMAKE_RUNTIME_OUTPUT_DIRECTORY:

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
    

    但是,这不会在 bin/ 内为每个不同的目标创建子目录。

    如果你愿意,你可以创建一个辅助函数来包装add_subdirectories

    function(my_add_executable TargetName)
      set(Files ${ARGV})
      list(REMOVE_AT Files 0)
      add_executable(${TargetName} ${Files})
      set_target_properties(${TargetName} PROPERTIES
                                RUNTIME_OUTPUT_DIRECTORY
                                    "${CMAKE_SOURCE_DIR}/bin/${TargetName}")
    endfunction()
    

    然后只需将您的调用更改为:

    my_add_executable(first main.cpp foo.cpp)
    my_add_executable(second bar.cpp)
    


    有关详细信息,请运行

    cmake --help-variable "CMAKE_RUNTIME_OUTPUT_DIRECTORY"
    cmake --help-property "RUNTIME_OUTPUT_DIRECTORY"
    cmake --help-property "RUNTIME_OUTPUT_DIRECTORY_<CONFIG>"
    

    【讨论】:

    • 这非常适合我。虽然我还没有使用它,但是随着我的代码库增长并且二进制文件在单个文件夹中变得更加杂乱无章,每个可执行目录的方法是一个好主意。另外,我不知道cmake 程序本身提供了参考功能。 (我记得今天早些时候回复了,但我没有看到消息,如果这是一个重复的帖子,请道歉。)
    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2021-05-10
    • 2012-02-29
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多