【问题标题】:Include source files on a per-configuration basis in CMake在 CMake 中按配置包含源文件
【发布时间】:2021-01-15 04:00:31
【问题描述】:

在我的特定 CMake 项目中,我有三个 CPP 文件:

a.cpp
b.cpp
c.cpp

我希望在所有配置(发布和调试)中编译“a.cpp”。
我只想在 DEBUG 配置中编译“b.cpp”。
我只想在 RELEASE 配置中编译“c.cpp”。

我该怎么做?我需要类似于 target_link_libraries() CMake 操作所接受的 debugoptimized 关键字。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    据我所知,cmake 没有提供基于配置排除某些文件的方法。因此,您需要一种解决方法来实现此行为。

    例如,您可以将b.cppc.cpp 的全部内容用一些守卫宏包装:

    #ifdef BUILD_ME
    //original content of your file
    #endif
    

    然后在 cmake 中设置特定于配置的编译器定义:

    if (${CMAKE_GENERATOR} MATCHES "Make" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
        # This block might be needed because CMAKE_BUILD_TYPE is usually
        # undefined for makefiles.
        # And COMPILE_DEFINITIONS_RELEASE are not chosen by default.
        set(CMAKE_BUILD_TYPE RELEASE)
    endif()
    
    set_source_files_properties(b.cpp PROPERTIES COMPILE_DEFINITIONS_DEBUG BUILD_ME )
    set_source_files_properties(c.cpp PROPERTIES COMPILE_DEFINITIONS_RELEASE BUILD_ME )
    add_executable(target_name a.cpp b.cpp c.cpp)
    

    【讨论】:

      【解决方案2】:

      自 3.17 起,此问题已得到修复: https://cmake.org/cmake/help/latest/release/3.17.html#generators

      “Visual Studio 生成器学会了支持每个配置源。以前只有命令行构建工具生成器支持它们。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 2013-05-13
        • 1970-01-01
        • 1970-01-01
        • 2014-02-20
        相关资源
        最近更新 更多