如何在 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" 选项,这不是这些标志的正确行为。

您的代码有两个问题:

  1. 您不应该测试 qbs.configuration 的值,它是用户设置的任意字符串。相反,使用 qbs.buildVariant,其中 "release"(全部小写!)是已知值。

  2. -s 不是驱动程序标志,而是实际的链接器标志,即 ld 理解的选项。因此,您应该使用 cpp.linkerFlags。如果使用 gcc 前端链接,该选项将自动转义。