如何阻止CMake将可执行目标的DEBUG_POSTFIX属性传递给依赖库?
解决DEBUG_POSTFIX属性传递问题
要让DEBUG_POSTFIX仅作用于可执行目标而不被依赖的库继承,你可以通过以下两种方式处理:
1. 显式重置依赖库的属性
如果依赖库意外继承了该属性,直接为库目标设置DEBUG_POSTFIX为它原本的值(或空),覆盖继承的属性:
# 为可执行目标设置DEBUG_POSTFIX set_target_properties(<myexec> PROPERTIES DEBUG_POSTFIX "-g") # 为依赖的库目标重置该属性,恢复其默认状态 set_target_properties(<mylib> PROPERTIES DEBUG_POSTFIX "")
这种方式直观直接,适合依赖库数量较少的场景。
2. 限定属性的作用域
利用CMake的生成器表达式,通过$<BUILD_INTERFACE:...>让DEBUG_POSTFIX仅作用于当前可执行目标的构建过程,避免传递给依赖目标:
set_target_properties(<myexec> PROPERTIES DEBUG_POSTFIX "$<BUILD_INTERFACE:-g>" )
这种方式无需逐个处理依赖库,属性只会绑定到当前可执行目标,不会被依赖的库继承。
额外说明:DEBUG_POSTFIX本身不属于CMake的接口属性(带INTERFACE_前缀的属性),正常情况下不会自动传递给依赖目标。如果出现继承情况,大概率是构建脚本中存在其他逻辑导致属性被意外传递,上述两种方法均可有效解决该问题。
内容的提问来源于stack exchange,提问作者MMM
相关产品推荐
相关产品推荐

