cmake - 如何省略单个源文件的调试信息?
问题描述
我正在为解析调试信息的工具编写测试,我想在调试目标中省略单个编译单元(源文件)的调试信息。有没有办法用cmake来完成这个?
显然,我可以对编译器标志进行硬编码,但我想让我的构建在不同的操作系统和工具链(比如 gnu 和 msvc)之间保持可移植性。
即时更改CMAKE_BUILD_TYPE
似乎不起作用。
解决方案
为此,您必须修改默认标志,因为使用多配置生成器您无法强制使用特定的构建类型。这只是一个简单的示例,展示了如何从默认值中删除调试标志,然后将其重新添加。然后您可以更新此示例以使用变量来收集所有源文件和一些 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 )
推荐阅读
- sql - 如何拆分字符串并将每个值作为记录插入数据库中?
- python - 使用python将行转换为列表
- java - 使用 Easymock 进行案例测试
- powershell - Powershell 的 -split 行为因方法参数而异
- c++ - 从 'TreeNode' 到 'TreeNode* ' 没有可行的转换
- solr - 当查询词混乱时,Solr 搜索结果会发生变化
- reactjs - 我们如何传入模板文字
- java - 如何通过 Jackson 将 BigDecimals 中的零部分与 Json 中的零部分保持一致
- netty - micronaut 休息响应定期挂起
- python - seaborn 的 FacetGrid 中是否有与“col_wrap”参数等效的行?