如何在MSVC的RelWthDebugInfo配置中生成调试信息并修改宏定义
解决MSVC下RelWithDebInfo配置的调试信息与编译宏问题
针对MSVC + CMake的场景,要在RelWithDebInfo配置下移除/DNDEBUG、添加/DDEBUG:FULL并确保调试信息生成,可按以下方案操作:
全局配置方案
直接针对MSVC编译器,通过CMake的编译选项和生成器表达式精准控制配置:
if(MSVC) # 取消NDEBUG宏定义,同时添加DEBUG:FULL宏 add_compile_options( $<$<CONFIG:RelWithDebInfo>:/UNDEBUG> $<$<CONFIG:RelWithDebInfo>:/DDEBUG:FULL> ) # 兜底确保调试信息生成(RelWithDebInfo默认已带/Zi,若配置被修改可通过此强制生效) add_compile_options( $<$<CONFIG:RelWithDebInfo>:/Zi> ) # 可选:自定义PDB文件的输出路径和名称,避免默认分散的pdb文件 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Fd${CMAKE_CURRENT_BINARY_DIR}/MyProject.pdb") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /Fd${CMAKE_CURRENT_BINARY_DIR}/MyProject.pdb") endif()
关键细节说明
/UNDEBUG:MSVC专用的取消宏定义选项,比字符串替换更可靠,能彻底取消NDEBUG宏,不受CMake默认配置影响。/DDEBUG:FULL:直接添加你需要的自定义宏定义。/Zi:MSVC生成完整调试信息的核心编译选项,RelWithDebInfo配置默认已包含,但如果之前的CMake配置被修改过,手动添加可兜底保证调试信息生成。/Fd:指定PDB文件的输出路径和名称,默认情况下MSVC会为每个目标生成单独的pdb,统一路径方便调试时查找。
单个目标的配置(可选)
如果不想全局修改,仅针对特定目标调整,可使用目标专属的配置命令:
target_compile_options(YourTargetName PRIVATE $<$<CONFIG:RelWithDebInfo>:/UNDEBUG> $<$<CONFIG:RelWithDebInfo>:/Zi> ) target_compile_definitions(YourTargetName PRIVATE $<$<CONFIG:RelWithDebInfo>:DEBUG:FULL> )
配置完成后,执行cmake --build . --config RelWithDebInfo构建即可得到符合要求的二进制文件。
内容的提问来源于stack exchange,提问作者StNickolay
相关产品推荐
相关产品推荐

