繁体   English   中英

多平台上的 CMake 多配置生成器

[英]CMake multi config generator on multi platform

我正在开发一个项目,该项目使用 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 生成器表达式的正确方法是什么?

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}>"
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM