如何让CMake仅生成Release/Debug配置并将Release设为RelWithDebInfo?
配置CMake仅生成Release/Debug并将Release映射为RelWithDebInfo
可以通过以下CMake配置实现需求:
- 限制仅生成Debug和Release两种构建配置
针对MSVC、Xcode这类多配置生成器,设置CMAKE_CONFIGURATION_TYPES变量,强制只保留Debug和Release:
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Build configurations" FORCE)
- 将Release配置的参数替换为RelWithDebInfo的参数
把Release对应的编译、链接参数全部替换为RelWithDebInfo的默认参数,这样选择Release构建时,实际会以优化+保留调试信息的方式编译:
# 替换C语言编译参数 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELWITHDEBINFO}" CACHE STRING "C Release flags" FORCE) # 替换C++语言编译参数 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" CACHE STRING "CXX Release flags" FORCE) # 替换各类链接器参数 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}" CACHE STRING "EXE Linker Release flags" FORCE) set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}" CACHE STRING "Shared Linker Release flags" FORCE) set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO}" CACHE STRING "Static Linker Release flags" FORCE) set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO}" CACHE STRING "Module Linker Release flags" FORCE)
补充说明
- 配置中的
FORCE选项用于覆盖CMake默认的参数设置,确保修改生效 - 对于GCC/Clang这类单配置生成器,当指定
-DCMAKE_BUILD_TYPE=Release时,也会自动使用RelWithDebInfo的参数编译 - 这样配置后,Qt Creator中选择Release构建时,实际会生成带调试信息的优化版本,解决Qt Creator无法识别RelWithDebInfo配置的问题
内容的提问来源于stack exchange,提问作者Alexey Starinsky
相关产品推荐
相关产品推荐

