【问题标题】:CMake multi config generator on multi platform多平台上的 CMake 多配置生成器
【发布时间】:2022-07-12 18:01:31
【问题描述】:

我正在开发一个项目,该项目使用 CMake 生成需要在 Windows 和 Linux 平台上编译的基于多平台的 C++ 项目。在基于 Windows 的项目中,我有兴趣生成具有以下四种配置文件配置的基于 MSVC 的解决方案:(Debug、Release、RelWithDebInfo 和 MinSizeRel)。

请注意,我设置了一些变量(FLAGS_COMPILE_DEBUG、DEFS_COMPILE_DEBUG、LINKER_OPTIONS_DEBUG、FLAGS_COMPILE_RELEASE、DEFS_COMPILE_RELEASE 和 LINKER_OPTIONS_RELEASE),其中包含每个基于调试和发布的解决方案配置文件的所有特定标志。

set(FLAGS_COMPILE_DEBUG "/MTd /Od /Zi /RTC1 /Zc:wchar_t /GS /WX")
set(DEFS_COMPILE_DEBUG "-D_DEBUG")
set(LINKER_OPTIONS_DEBUG "/WX")

set(FLAGS_COMPILE_RELEASE "/Ox /Ob2 /Oi /Ot /GF /Zc:wchar_t /MT /WX")
set(DEFS_COMPILE_RELEASE "-D_NDEBUG")
set(LINKER_OPTIONS_RELEASE "/WX")

# Each one VS profile configurations
add_compile_options($<$<CONFIG:Debug>:${FLAGS_COMPILE_DEBUG}>)
add_definitions($<$<CONFIG:Debug>:${DEFS_COMPILE_DEBUG}>)
add_link_options($<$<CONFIG:Debug>:${LINKER_OPTIONS_DEBUG}>)

add_compile_options($<$<CONFIG:Release>:${FLAGS_COMPILE_RELEASE}>)
remove_definitions($<$<CONFIG:Release>:${DEFS_COMPILE_DEBUG}>)
add_definitions($<$<CONFIG:Release>:${DEFS_COMPILE_RELEASE}>)
add_link_options($<$<CONFIG:Release>:${LINKER_OPTIONS_RELEASE}>)

add_compile_options($<$<CONFIG:RelWithDebInfo>:${FLAGS_COMPILE_RELEASE}>)
add_definitions($<$<CONFIG:RelWithDebInfo>:${DEFS_COMPILE_DEBUG}>)
add_link_options($<$<CONFIG:RelWithDebInfo>:${LINKER_OPTIONS_DEBUG}>)

add_compile_options($<$<CONFIG:MinSizeRel>:${FLAGS_COMPILE_RELEASE}>)
remove_definitions($<$<CONFIG:MinSizeRel>:${DEFS_COMPILE_DEBUG}>)
add_definitions($<$<CONFIG:MinSizeRel>:${DEFS_COMPILE_RELEASE}>)
add_link_options($<$<CONFIG:MinSizeRel>:${LINKER_OPTIONS_RELEASE}>)

但是,我注意到对于每个基于 Debug 和 Release 的解决方案配置配置文件,我都没有获得预期的效果。在我的情况下,使用 CMake 生成器表达式的正确方法是什么?

【问题讨论】:

    标签: visual-studio cmake multiplatform


    【解决方案1】:

    add_definitions()remove_definitions() 不支持生成器表达式。你想要add_compile_definitions()

    set(FLAGS_COMPILE_DEBUG /MTd /Od /Zi /RTC1 /Zc:wchar_t /GS /WX)
    set(DEFS_COMPILE_DEBUG -D_DEBUG)
    set(LINKER_OPTIONS_DEBUG /WX)
    
    set(FLAGS_COMPILE_RELEASE /Ox /Ob2 /Oi /Ot /GF /Zc:wchar_t /MT /WX)
    set(DEFS_COMPILE_RELEASE -D_NDEBUG)
    set(LINKER_OPTIONS_RELEASE /WX)
    
    add_compile_options(
        "$<$<CONFIG:Debug>:${FLAGS_COMPILE_DEBUG}>"
        "$<$<CONFIG:Release>:${FLAGS_COMPILE_RELEASE}>"
        "$<$<CONFIG:RelWithDebInfo>:${FLAGS_COMPILE_RELEASE}>"
        "$<$<CONFIG:MinSizeRel>:${FLAGS_COMPILE_RELEASE}>"
    )
    add_compile_definitions(
        "$<$<CONFIG:Debug>:${DEFS_COMPILE_DEBUG}>"
        "$<$<CONFIG:Release>:${DEFS_COMPILE_RELEASE}>"
        "$<$<CONFIG:RelWithDebInfo>:${DEFS_COMPILE_DEBUG}>"
        "$<$<CONFIG:MinSizeRel>:${DEFS_COMPILE_RELEASE}>"
    )
    add_link_options(
        "$<$<CONFIG:Debug>:${LINKER_OPTIONS_DEBUG}>"
        "$<$<CONFIG:Release>:${LINKER_OPTIONS_RELEASE}>"
        "$<$<CONFIG:RelWithDebInfo>:${LINKER_OPTIONS_DEBUG}>"
        "$<$<CONFIG:MinSizeRel>:${LINKER_OPTIONS_RELEASE}>"
    )
    

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 2018-07-23
      • 2016-08-17
      • 2021-01-08
      • 2019-08-16
      • 2018-02-11
      • 2017-08-03
      • 1970-01-01
      • 2021-03-30
      相关资源
      最近更新 更多