Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在QBS中,如何在释放模式下将strip标志传递给链接器?_Qt_Gcc_Qbs - Fatal编程技术网

Qt 在QBS中,如何在释放模式下将strip标志传递给链接器?

Qt 在QBS中,如何在释放模式下将strip标志传递给链接器?,qt,gcc,qbs,Qt,Gcc,Qbs,我在QtCreator4.5.1中使用MSYS2下的QBS1.10.1 当为链接步骤调用时,我想将-s传递到g++,以减小释放模式二进制文件的大小。我该怎么做 到目前为止,我已经按照文件的建议进行了尝试: cpp.driverFlags: ["-municode", "-static", "-static-libgcc", "-static-libstdc++"] Properties { condition: qbs.configuration === "Rel

我在QtCreator4.5.1中使用MSYS2下的QBS1.10.1

当为链接步骤调用时,我想将
-s
传递到
g++
,以减小释放模式二进制文件的大小。我该怎么做

到目前为止,我已经按照文件的建议进行了尝试:

   cpp.driverFlags: ["-municode", "-static", "-static-libgcc", "-static-libstdc++"]

    Properties {
        condition: qbs.configuration === "Release"
        cpp.driverFlags: outer.concat("-s")
    }
但是,它实际上并没有在释放模式下通过
-s
,也就是说,就好像属性块不在那里一样


注意:
cpp.driverFlags
选项实际上将标志传递给
g++
的所有实例,而不仅仅是链接步骤;但是,我无法找到一种方法,仅为链接步骤指定标志。如果不是一个链接步骤,g++足够聪明,可以忽略这些标志。
cpp.linkerFlags
字段实际上将标志转换为
-Wl,“flag”
选项,这不是这些标志的正确行为。

您的代码有两个问题:

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

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


  • 您的代码有两个问题:

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

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


  • “release”
    用小写字母表示,这让我很生气;在Qt Creator中,它始终以首字母大写的形式显示。在我意识到我的错误之前,我还发现
    条件:!qbs.debugInformation
    起作用了。如果我在什么上下文中使用未定义的变量(而不是像变量是空值一样),有没有办法让它抱怨?小写的
    “release”
    把我甩了;在Qt Creator中,它始终以首字母大写的形式显示。在我意识到我的错误之前,我还发现
    条件:!qbs.debugInformation
    有效。如果我在什么上下文中使用未定义的变量(而不是像变量作为空值存在一样),有没有办法让它抱怨?