我正在做一个使用CMake来生成一个基于多平台的C++项目的项目,它需要在Windows和Linux平台上编译。在基于Windows的项目中,我对生成基于MSVC的解决方案感兴趣,这些解决方案具有以下四个配置文件配置:(调试、发布、RelWithDebInfo和最小大小关系)。
请注意,我设置了一些变量(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生成器表达式的正确方法是什么?
1条答案
按热度按时间vu8f3i0k1#
add_definitions()
和remove_definitions()
不支持生成器表达式。您需要add_compile_definitions()
。