代码之家  ›  专栏  ›  技术社区  ›  BastiBen

构建优化的Qt4-“/configure”标志及其含义

  •  2
  • BastiBen  · 技术社区  · 16 年前

    我最近关注了关于Qt4兴趣邮件列表的讨论,讨论了构建商业/专有应用程序并将Qt4静态链接到其中是否合法。虽然有一些未经验证的方法(通过向客户提供对象文件和Makefile等),但这听起来毕竟不是一个好主意。

    我自己对编译Qt很熟悉,但是Qt有很多标志和开关。

    现在,我正在使用以下标志进行构建:

    ./configure \
      -fast \
      -opensource \
      -qt-sql-sqlite \
      -nomake demos examples \
      -silent \
      -no-qt3support \
      -no-gif \
      -plugin-sql-mysql \
      -release \
      -no-xmlpatterns \
      -no-multimedia
    

    我不完全确定以下标志有哪些影响:

    • -no-stl
    • -no-javascript-jit
    • -no-nis
    • -separate-debug-info
    • -no-openvg
    • -no-mitshm

    哦,作为旁注,当动态链接Qt时,我编译的应用程序大小约为600kb(非剥离)。我对它进行了实验,发现当我静态链接时,它的大小约为4MB;但这样我就不必再包含40MB的Qt库了。

    如果您在这方面比我更先进,那么您如何优化/部署自己的应用程序,并确保它们快速启动,并且只包含所需的内容?

    4 回复  |  直到 9 年前
        1
  •  2
  •   rpg    16 年前

    我能想到的事情很少:

    • 真正地
    • 使用预处理器标志排除部分Qt功能。e、 g:QT_NO_STL=-NO STL。
    • 删除某些样式(-no style-)
        2
  •  2
  •   e8johan    16 年前

    当您跳过了所有模块并且觉得不需要时,您可以继续使用qconfig工具(隐藏在$QTDIR/tools/tree中)并删除单个类。只需注意依赖关系——您可能需要迭代几次才能构建Qt(例如,QSpinBox取决于QValidator是否存在)。

    在构建Qt时,尤其是多次构建Qt时,-nomake标志非常节省时间。试试-nomake示例-nomake演示。

        3
  •  0
  •   Jean-Michaël Celerier    12 年前

    通用速度的另一个优化在于编译Qt时使用编译器优化,但您必须编辑一些文件。 首先执行configure脚本,它构建qmake

    您可以修改Makefile.win32或Makefile.unix并添加以下行:

    QMAKE_CXXFLAGS_RELEASE = -CompilerDependentOptimizerSwitches 
    

    但是 编辑用于构建Qt的MKSpec时会进行优化。

    例如,在使用VS2012的windows下,您可能会修改 qtbase/mkspecs/win32-msvc2012/qmake.conf

    QMAKE_CFLAGS_RELEASE    = -O2 -MD
    QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE
    

    由于您希望优化尺寸,因此可以将其替换为:

    QMAKE_CFLAGS_RELEASE    = -O1 -MD
    

    (根据 http://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx

    有时,它包括在中找到的更高级别的mkspec qtbase/mkspecs/common/ 迪尔。

    我在Debian/g++4.8.1上用 -O3 -march=native (默认值为 -O2 )如果它服务于任何人。

    完成此操作后,只需在Qt git root上运行make,然后与您的团队一起喝杯啤酒,因为即使在一台好的计算机上,它也需要很长时间(在i7上大约需要2小时,无需构建演示/示例,但使用webkit)。

        4
  •  0
  •   user6787592    9 年前
    sed -i 's@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD -march=native@g'  qtbase/mkspecs/common/linux.conf
    

    将在Linux上优化Qt5.8