如何在QBS的Release模式下为链接器传递strip(-s)参数?
在QBS中为Release模式的g++链接阶段添加-s参数的解决方案
我来帮你搞定这个问题!你遇到的核心问题是在Properties块里用了outer.concat来继承外层的cpp.driverFlags,这在QBS里是错误的写法,直接导致Release模式下的配置没生效。
原配置的问题分析
QBS里,当你在Properties块中想要引用当前属性的外层已有值时,得用base关键字,而不是outer。outer指向的是外层的项目/产品对象,并不是当前属性的已有参数列表,所以你的outer.concat("-s")根本没正确继承之前的["-municode", "-static", "-static-libgcc", "-static-libstdc++"]这些参数,自然也没把-s加进去。
正确的配置写法
把你的代码改成下面这样就行:
cpp.driverFlags: ["-municode", "-static", "-static-libgcc", "-static-libstdc++"] Properties { condition: qbs.configuration === "Release" cpp.driverFlags: base.concat("-s") }
为什么这样能生效?
base在这里代表外层定义的cpp.driverFlags参数列表,base.concat("-s")会把-s追加到原有参数的末尾,这样Release模式下的cpp.driverFlags就包含了你需要的所有参数。- 正如你提到的,
cpp.driverFlags会传递给所有g调用,但g在编译阶段会自动忽略-s这个链接专用参数,只有在链接阶段才会生效,完全符合你的需求。
验证配置是否生效
你可以在Qt Creator的编译输出里搜索链接阶段的g++命令(通常是包含一堆.o文件的那行长命令),检查里面是否已经包含了-s参数,就能确认配置是否生效了。
内容的提问来源于stack exchange,提问作者M.M
相关产品推荐
相关产品推荐

