如何在 QBS 的发布模式下将剥离标志传递给链接器?
How to pass strip flag to linker in release mode in QBS?
我在 Qt Creator 4.5.1 中使用 QBS 1.10.1,在 MSYS2 下。
我想在 link 步骤调用时将 -s
传递给 g++
,以减少发布模式二进制文件的大小。我该怎么做?
到目前为止,我已经按照文档的建议进行了尝试:
cpp.driverFlags: ["-municode", "-static", "-static-libgcc", "-static-libstdc++"]
Properties {
condition: qbs.configuration === "Release"
cpp.driverFlags: outer.concat("-s")
}
但是在发布模式下它实际上并没有通过 -s
,也就是说,就好像属性块不存在一样。
注意: cpp.driverFlags
选项实际上将标志传递给 g++
的所有实例,而不仅仅是 link 步骤;但是我一直无法找到一种方法来只为 link 步骤指定标志。如果不是 link 步骤,g++ 足够聪明,可以忽略这些标志。 cpp.linkerFlags
字段实际上将标志转换为 -Wl,"flag"
选项,这不是这些标志的正确行为。
您的代码有两个问题:
您不应该测试 qbs.configuration 的值,它是用户设置的任意字符串。相反,使用 qbs.buildVariant
,其中 "release"
(全部小写!)是已知值。
-s
不是驱动程序标志,而是实际的链接器标志,即 ld
理解的选项。因此,您应该使用 cpp.linkerFlags
。如果使用 gcc 前端链接,该选项将自动转义。
我在 Qt Creator 4.5.1 中使用 QBS 1.10.1,在 MSYS2 下。
我想在 link 步骤调用时将 -s
传递给 g++
,以减少发布模式二进制文件的大小。我该怎么做?
到目前为止,我已经按照文档的建议进行了尝试:
cpp.driverFlags: ["-municode", "-static", "-static-libgcc", "-static-libstdc++"]
Properties {
condition: qbs.configuration === "Release"
cpp.driverFlags: outer.concat("-s")
}
但是在发布模式下它实际上并没有通过 -s
,也就是说,就好像属性块不存在一样。
注意: cpp.driverFlags
选项实际上将标志传递给 g++
的所有实例,而不仅仅是 link 步骤;但是我一直无法找到一种方法来只为 link 步骤指定标志。如果不是 link 步骤,g++ 足够聪明,可以忽略这些标志。 cpp.linkerFlags
字段实际上将标志转换为 -Wl,"flag"
选项,这不是这些标志的正确行为。
您的代码有两个问题:
您不应该测试 qbs.configuration 的值,它是用户设置的任意字符串。相反,使用
qbs.buildVariant
,其中"release"
(全部小写!)是已知值。-s
不是驱动程序标志,而是实际的链接器标志,即ld
理解的选项。因此,您应该使用cpp.linkerFlags
。如果使用 gcc 前端链接,该选项将自动转义。