首页 > 解决方案 > 如何省略单个源文件的调试信息?

问题描述

我正在为解析调试信息的工具编写测试,我想在调试目标中省略单个编译单元(源文件)的调试信息。有没有办法用cmake来完成这个?

显然,我可以对编译器标志进行硬编码,但我想让我的构建在不同的操作系统和工具链(比如 gnu 和 msvc)之间保持可移植性。

即时更改CMAKE_BUILD_TYPE似乎不起作用。

标签: cmake

解决方案


为此,您必须修改默认标志,因为使用多配置生成器您无法强制使用特定的构建类型。这只是一个简单的示例,展示了如何从默认值中删除调试标志,然后将其重新添加。然后您可以更新此示例以使用变量来收集所有源文件和一些 if 语句来检查哪个编译器是用于测试-g/Zi

cmake_minimum_required(VERSION 3.12)

project(sample)

message( "\${CMAKE_CXX_FLAGS_RELEASE} = ${CMAKE_CXX_FLAGS_RELEASE}")
message( "\${CMAKE_CXX_FLAGS_DEBUG} = ${CMAKE_CXX_FLAGS_DEBUG}")
string(REPLACE "-g" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
string(REPLACE "/Zi" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
string(REPLACE "-g" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
string(REPLACE "/Zi" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
message( "\${CMAKE_CXX_FLAGS_DEBUG} = ${CMAKE_CXX_FLAGS_DEBUG}")
message( "\${CMAKE_CXX_FLAGS_RELWITHDEBINFO} = ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
set_source_files_properties(file1.cpp PROPERTIES COMPILE_FLAGS "/Zi")

add_executable( sample file1.cpp file2.cpp )

推荐阅读