zoukankan      html  css  js  c++  java
  • QtEmbedded开发介绍之配置参数篇上

     http://www.cuteqt.com/blog/?p=582  

    经常有人会在BBS和QQ群上大喊:怎么裁剪Qt,怎么安装那么困难啊。

    每当我看见时,都是非常无奈,其实Qt有套良好的配置安装机制,跟大多数linux程序一样,典型的先configure,然后make,最后make install三部曲。而如果要裁剪参数,其实可以在configure加上对应的参数来实现,通过合理的选择,完全可以做到满足项目的开发。对于嵌入式开发来说,资源是极其重要的,这就要求我们应该对应不同的项目开发,对Qte进行不同的裁剪来实现。

    其实,在前面的减少Qt编译时间暨简单Qt裁剪已经对这个题目有了非常详细的概述,并且通过qconfig工具可以做到控件级的裁剪,但是如果能在configure阶段,能搞清楚参数,我想对于开发也是有很大的帮助。

    为了与时俱进,本人的例子都是参照qt-embedded-linux-opensource-src-4.5.x系列。

    当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,那我们只要选取参数部分看看就OK

    Configure options:

    The defaults (*) are usually acceptable. A plus (+) denotes a default value
    that needs to be evaluated. If the evaluation succeeds, the feature is
    included. Here is a short explanation of each option:

    *  -release ……….. Compile and link Qt with debugging turned off.
    -debug …………. Compile and link Qt with debugging turned on.
    -debug-and-release . Compile and link two versions of Qt, with and without
    debugging turned on (Mac only).

    -developer-build…. Compile and link Qt with Qt developer options (including auto-tests exporting)

    -opensource……… Compile and link the Open-Source Edition of Qt.
    -commercial……… Compile and link the Commercial Edition of Qt.

    *  -shared ………… Create and use shared Qt libraries.
    -static ………… Create and use static Qt libraries.

    *  -no-fast ……….. Configure Qt normally by generating Makefiles for all
    project files.
    -fast ………….. Configure Qt quickly by generating Makefiles only for
    library and subdirectory targets.  All other Makefiles
    are created as wrappers, which will in turn run qmake.

    -no-largefile …… Disables large file support.
    +  -largefile ……… Enables Qt to access files larger than 4 GB.

    *  -no-exceptions ….. Disable exceptions on compilers that support it.
    -exceptions …….. Enable exceptions on compilers that support it.

    -no-accessibility .. Do not compile Accessibility support.
    *  -accessibility ….. Compile Accessibility support.

    -no-stl ………… Do not compile STL support.
    *  -stl …………… Compile STL support.

    -no-sql-<driver> … Disable SQL <driver> entirely.
    -qt-sql-<driver> … Enable a SQL <driver> in the QtSql library, by default
    none are turned on.
    -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to
    at run time.

    Possible values for <driver>:
    [  db2 ibase mysql oci odbc psql sqlite sqlite2 tds ]

    -system-sqlite ….. Use sqlite from the operating system.

    -no-qt3support ….. Disables the Qt 3 support functionality.
    *  -qt3support …….. Enables the Qt 3 support functionality.

    -no-xmlpatterns …. Do not build the QtXmlPatterns module.
    +  -xmlpatterns ……. Build the QtXmlPatterns module.
    QtXmlPatterns is built if a decent C++ compiler
    is used and exceptions are enabled.

    -no-phonon ……… Do not build the Phonon module.
    +  -phonon ………… Build the Phonon module.
    Phonon is built if a decent C++ compiler is used.
    -no-phonon-backend.. Do not build the platform phonon plugin.
    +  -phonon-backend….. Build the platform phonon plugin.

    -no-svg ………… Do not build the SVG module.
    +  -svg …………… Build the SVG module.

    -no-webkit ……… Do not build the WebKit module.
    +  -webkit ………… Build the WebKit module.
    WebKit is built if a decent C++ compiler is used.

    -no-scripttools …. Do not build the QtScriptTools module.
    +  -scripttools ……. Build the QtScriptTools module.

    -platform target … The operating system and compiler you are building
    on (qws/linux-x86-g++).

    See the README file for a list of supported
    operating systems and compilers.

    -no-mmx ………… Do not compile with use of MMX instructions.
    -no-3dnow ………. Do not compile with use of 3DNOW instructions.
    -no-sse ………… Do not compile with use of SSE instructions.
    -no-sse2 ……….. Do not compile with use of SSE2 instructions.

    -qtnamespace <name>  Wraps all Qt library code in ‘namespace <name> {…}’.
    -qtlibinfix <infix>  Renames all libQt*.so to libQt*<infix>.so.

    -D <string> …….. Add an explicit define to the preprocessor.
    -I <string> …….. Add an explicit include path.
    -L <string> …….. Add an explicit library path.

    -help, -h ………. Display this information.

    Third Party Libraries:

    -qt-zlib ……….. Use the zlib bundled with Qt.
    +  -system-zlib ……. Use zlib from the operating system.
    See http://www.gzip.org/zlib

    -no-gif ………… Do not compile the plugin for GIF reading support.
    *  -qt-gif ………… Compile the plugin for GIF reading support.
    See also src/plugins/imageformats/gif/qgifhandler.h

    -no-libtiff …….. Do not compile the plugin for TIFF support.
    -qt-libtiff …….. Use the libtiff bundled with Qt.
    +  -system-libtiff …. Use libtiff from the operating system.
    See http://www.libtiff.org

    -no-libpng ……… Do not compile in PNG support.
    -qt-libpng ……… Use the libpng bundled with Qt.
    +  -system-libpng ….. Use libpng from the operating system.
    See http://www.libpng.org/pub/png

    -no-libmng ……… Do not compile the plugin for MNG support.
    -qt-libmng ……… Use the libmng bundled with Qt.
    +  -system-libmng ….. Use libmng from the operating system.
    See http://www.libmng.com

    -no-libjpeg …….. Do not compile the plugin for JPEG support.
    -qt-libjpeg …….. Use the libjpeg bundled with Qt.
    +  -system-libjpeg …. Use libjpeg from the operating system.
    See http://www.ijg.org

    -no-openssl …….. Do not compile support for OpenSSL.
    +  -openssl ……….. Enable run-time OpenSSL support.
    -openssl-linked …. Enabled linked OpenSSL support.

    -ptmalloc ………. Override the system memory allocator with ptmalloc.
    (Experimental.)

    Additional options:

    -make <part> ……. Add part to the list of parts to be built at make time.
    (libs tools examples demos docs translations)
    -nomake <part> ….. Exclude part from the list of parts to be built.

    -R <string> …….. Add an explicit runtime library path to the Qt
    libraries.
    -l <string> …….. Add an explicit library.

    -no-rpath ………. Do not use the library install path as a runtime
    library path.
    +  -rpath …………. Link Qt libraries and executables using the library
    install path as a runtime library path. Equivalent
    to -R install_libpath

    -continue ………. Continue as far as possible if an error occurs.

    -verbose, -v ……. Print verbose information about each step of the
    configure process.

    -silent ………… Reduce the build output so that warnings and errors
    can be seen more easily.

    *  -no-optimized-qmake … Do not build qmake optimized.
    -optimized-qmake …… Build qmake optimized.

    -no-nis ………… Do not compile NIS support.
    *  -nis …………… Compile NIS support.

    -no-cups ……….. Do not compile CUPS support.
    *  -cups ………….. Compile CUPS support.
    Requires cups/cups.h and libcups.so.2.

    -no-iconv ………. Do not compile support for iconv(3).
    *  -iconv …………. Compile support for iconv(3).

    -no-pch ………… Do not use precompiled header support.
    *  -pch …………… Use precompiled header support.

    -no-dbus ……….. Do not compile the QtDBus module.
    +  -dbus ………….. Compile the QtDBus module and dynamically load libdbus-1.
    -dbus-linked ……. Compile the QtDBus module and link to libdbus-1.

    -reduce-relocations ….. Reduce relocations in the libraries through extra
    linker optimizations (Qt/X11 and Qt for Embedded Linux only;
    experimental; needs GNU ld >= 2.18).

    -no-separate-debug-info . Do not store debug information in a separate file.
    *  -separate-debug-info …. Strip debug information into a separate .debug file.

    Qt for Embedded Linux only:

    -xplatform target … The target platform when cross-compiling.

    -no-feature-<feature> Do not compile in <feature>.
    -feature-<feature> .. Compile in <feature>. The available features
    are described in src/corelib/global/qfeatures.txt

    -embedded <arch> …. This will enable the embedded build, you must have a
    proper license for this switch to work.
    Example values for <arch>: arm mips x86 generic

    -armfpa …………. Target platform is uses the ARM-FPA floating point format.
    -no-armfpa ………. Target platform does not use the ARM-FPA floating point format.

    The floating point format is usually autodetected by configure. Use this
    to override the detected value.

    -little-endian …… Target platform is little endian (LSB first).
    -big-endian ……… Target platform is big endian (MSB first).

    -host-little-endian . Host platform is little endian (LSB first).
    -host-big-endian …. Host platform is big endian (MSB first).

    You only need to specify the endianness when
    cross-compiling, otherwise the host
    endianness will be used.

    -no-freetype …….. Do not compile in Freetype2 support.
    -qt-freetype …….. Use the libfreetype bundled with Qt.
    *  -system-freetype …. Use libfreetype from the operating system.
    See http://www.freetype.org/

    -qconfig local …… Use src/corelib/global/qconfig-local.h rather than the
    default (full).

    -depths <list> …… Comma-separated list of supported bit-per-pixel
    depths, from: 1, 4, 8, 12, 15, 16, 18, 24, 32 and ‘all’.

    -qt-decoration-<style> ….Enable a decoration <style> in the QtGui library,
    by default all available decorations are on.
    Possible values for <style>: [ styled windows default ]
    -plugin-decoration-<style> Enable decoration <style> as a plugin to be
    linked to at run time.
    Possible values for <style>: [  default styled windows ]
    -no-decoration-<style> ….Disable decoration <style> entirely.
    Possible values for <style>: [ styled windows default ]

    -no-opengl ………. Do not support OpenGL.
    -opengl <api> ……. Enable OpenGL ES support
    With no parameter, this will attempt to auto-detect OpenGL ES 1.x
    or 2.x. Use es1, es1cl or es2 for <api> to override auto-detection.

    NOTE: A QGLScreen driver for the hardware is required to support
    OpenGL ES on Qt for Embedded Linux.

    -qt-gfx-<driver> … Enable a graphics <driver> in the QtGui library.
    Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen ]
    -plugin-gfx-<driver> Enable graphics <driver> as a plugin to be
    linked to at run time.
    Possible values for <driver>: [  ahi directfb hybrid linuxfb powervr qvfb transformed vnc ]
    -no-gfx-<driver> … Disable graphics <driver> entirely.
    Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen ]

    -qt-kbd-<driver> … Enable a keyboard <driver> in the QtGui library.
    Possible values for <driver>: [ tty usb sl5000 yopy vr41xx qvfb ]

    -plugin-kbd-<driver> Enable keyboard <driver> as a plugin to be linked to
    at runtime.
    Possible values for <driver>: [  linuxis sl5000 usb vr41xx yopy ]

    -no-kbd-<driver> … Disable keyboard <driver> entirely.
    Possible values for <driver>: [ tty usb sl5000 yopy vr41xx qvfb ]

    -qt-mouse-<driver> … Enable a mouse <driver> in the QtGui library.
    Possible values for <driver>: [ pc bus linuxtp yopy vr41xx tslib qvfb ]
    -plugin-mouse-<driver> Enable mouse <driver> as a plugin to be linked to
    at runtime.
    Possible values for <driver>: [  bus linuxis linuxtp pc tslib vr41xx yopy ]
    -no-mouse-<driver> … Disable mouse <driver> entirely.
    Possible values for <driver>: [ pc bus linuxtp yopy vr41xx tslib qvfb ]

    -iwmmxt ………… Compile using the iWMMXt instruction set
    (available on some XScale CPUs).

    -no-glib ……….. Do not compile Glib support.
    +  -glib ………….. Compile Glib support.

    这么参数,看得头晕了,但是其实仔细分析下,就会发现这些参数大多数是不难的,意思是非常好了解。本人移植qte时,就是一个一个参数配置过来的,当然,有些是可以无视的。接下来,就容本菜菜为您一一解释。

    我们可以发现,有的参数前面有*号,这就意味这如果我们什么也不做,直接配置编译的话,就会把这些参数默认进去。不过,如果什么也不做,那裁剪也无从说起了。为了便于分析,接下来,我就是以如下格式进行:

    参数
    解释。

    -release
    这个参数显而易见,就是编译Qt以发布版的模式进行,一般来说,最后系统完成后,库就应该是发布版。

    -debug
    与上面对应,自然是调试版了,如果开发的话,可以选择它吧。

    -debug-and-release
    囧,上面那两个的儿子。

    -developer-build
    囧,我错了,开发者也可以用这个的,选了这个后,可以进行自动测试,不过还没去用过,以后可以研究研究。

    -opensource
    -commercial
    这两个参数是指是编译是商业版本的,还是开源版本呢,视个人情况而定。

    -shared
    -static
    这两个参数是指Qt的lib以动态还是静态编译生成,这自然也是视个人需要的。

    -no-fast
    -fast
    这两个就很有关系,如果对自己的电脑性能很有信心,那就选第一个,那所有的工程文件都会生成到makefiles中,那编译的时间,估计可以看完变形金刚了。如果选第二个,那就加入子目录和库到makefiles,这样就能加快编译的速度。

    -no-largefile
    -largefile
    顾名思义,支不支持大文件,一般来说,嵌入式里是不会有从超过4G的大文件的,那就选第一个吧。

    -no-exceptions
    -exceptions
    计算机英语够好的人都该懂,这个自然就是异常情况,选则编译器支持抛出异常,否则不支持。

    -no-accessibility
    -accessibility
    可访问性的支持,说实话,这个我真不知道有什么有用了。等哪天发现了,再来好好解释。

    -no-stl
    -stl
    是都加入stl的支持,stl,这应该算是C++程序员应该都了解了,再不济,那也总听说过大名吧。

    no-sql-<driver>
    -qt-sql-<driver>
    -plugin-sql-<driver>

    这个可要好好说明下,一般来说,对于一个优秀的项目开发,数据库是必不可少的,qt也自带了大多数数据库驱动,可以完美地支持数据库的使用。对于数据库的使用,我们可以直接qt驱动编译进去,或者以插件的形式编译进去。一般来说,最简单地就是直接编译进去,但使用插件形式的可以更加灵活,针对不同的需求将驱动插件添加。其中,<>代表的是驱动名,如果我想直接添加sqlite的支持话,形式如下:-qt-sql-sqlite。其他名称可以自己查看参数里,有详细地介绍。

    -system-sqlite
    sqlite真受欢迎啊,当然那么优秀的嵌入式数据库,本人也是基本使用它来进行开发。这个参数意思是使用操作系统上的sqlite数据库,如果是不太会移植的,可以考虑直接使用qt自带的驱动。

    -no-qt3support
    -qt3support
    这个也是简洁易懂,加不加对qt3的支持。

    no-xmlpatterns
    -xmlpatterns
    选择对xml的支持,如果对网络无需求的话,就不用加了。

    -no-phonon
    -phonon
    phonon是qt中处理多媒体的模块,比如放放视频什么来着,不过本人从没用过,也是根据需要选择的。

    -no-phonon-backend
    -phonon-backend
    与上面类似,只不过这两是以插件的形式加入支持。

    -no-svg
    -svg
    是否加入svg的支持,svg即可缩放矢量图形。

    -no-webkit
    -webkit
    是否加入webkit的支持,这可是个好东西,不过如果跟网络不搭界的话,还是不支持吧。

    -no-scripttools
    -scripttools
    是否加入脚本工具的支持,这对php等脚本工程师来说是个很棒的参数,但对于我这样菜鸟,就别提了。

    -platform target
    目标平台,这可是关键了,如果不注意的话,编译出来是x86上的话,哪怕是再牛的嵌入式工程师来也没法帮你移植到开发板上。通常,本人是linux-arm-g++。

    -no-mmx
    -no-3dnow
    -no-sse
    -no-sse2
    这四个参数是针对CPU的指令集,老实说,我也不甚了解,不过,对于开发并不是影响很大。

    -qtnamespace
    把qt的库封装到命名空间,没啥重要用处,依个人爱好加吧。

    -qtlibinfix
    将所有的qt的.so库重命名,也没啥大用处。

    好了,以上就是qt最基本的参数,接下来静待下篇吧囧。

  • 相关阅读:
    URL参数解析成一个Json对象
    线程(一)实现方式和生命周期
    有1、2、3、4 四个数字,编程实现能组成多少个互不相同且无重复数字的三位数?都是多少?
    Mybatis学习一 CRUD的实现
    Mybatis学习二 实现关联表查询
    .attr()和.prop()和.css()的区别
    利用try-catch判断变量是已声明未赋值还是未声明
    转载的清除浮动
    表单控件之select
    keypress和keydown事件及keyCode和keyChar
  • 原文地址:https://www.cnblogs.com/leaven/p/1850587.html
Copyright © 2011-2022 走看看