zoukankan      html  css  js  c++  java
  • Qt的目录依赖问题----怎样生成一个绿色的Qt软件包

    Qt的目录依赖问题----怎样生成一个绿色的Qt软件包

    一、核心问题:

    如果将编译好的Qt文件拷贝到任何目录下,作为一个绿色软件库来使用?

    二、原理讨论

    由于Qt在编译的时候将安装路径硬编码到了库文件中,这个问题似乎不太好解决。使用如下命令,可以查看到底有哪些路径:

    qmake -query

    可得到类似的如下结果:

    QT_INSTALL_PREFIX:/usr/lib/qt4
    QT_INSTALL_DATA:/usr/lib/qt4
    QT_INSTALL_DOCS:/usr/share/doc/qt4
    QT_INSTALL_HEADERS:/usr/include
    QT_INSTALL_LIBS:/usr/lib
    QT_INSTALL_BINS:/usr/lib/qt4/bin
    QT_INSTALL_PLUGINS:/usr/lib/qt4/plugins
    QT_INSTALL_IMPORTS:/usr/lib/qt4/imports
    QT_INSTALL_TRANSLATIONS:/usr/share/qt4/translations
    QT_INSTALL_CONFIGURATION:/etc
    QT_INSTALL_EXAMPLES:/usr/lib/qt4/examples
    QT_INSTALL_DEMOS:/usr/lib/qt4/demos
    QMAKE_MKSPECS:/usr/lib/qt4/mkspecs
    QMAKE_VERSION:2.01a
    QT_VERSION:4.7.4

    幸运的是,在Qt4中引入了一个新的机制: qt.conf,于是,这个问题得以解决。这些路径都可以被覆盖。在assistant中查看qt.conf的帮助,可以了解qt.conf的大致写法。

     [Paths]
     Prefix = /some/path
     Translations = i18n

    如果你将上述qt.conf置于qmake所在的目录下会发生什么? qmake -query会告诉你答案

    QT_INSTALL_PREFIX:/some/path
    QT_INSTALL_DATA:/some/path
    QT_INSTALL_DOCS:/some/path/doc
    QT_INSTALL_HEADERS:/some/path/include
    QT_INSTALL_LIBS:/some/path/lib
    QT_INSTALL_BINS:/some/path/bin
    QT_INSTALL_PLUGINS:/some/path/plugins
    QT_INSTALL_IMPORTS:/some/path/imports
    QT_INSTALL_TRANSLATIONS:/some/path/i18n
    QT_INSTALL_CONFIGURATION:/some/path
    QT_INSTALL_EXAMPLES:/some/path
    QT_INSTALL_DEMOS:/some/path
    QMAKE_MKSPECS:/some/path/mkspecs
    QMAKE_VERSION:2.01a
    QT_VERSION:4.8.2

    于是,我们可以得到如下结论: 假如有一个qt.conf文件位于Qt可执行文件所有的目录下面,比如/usr/bin目录中,则这些可执行文件的搜索路径将被qt.conf中指定的路径所覆盖。 Prefix是关键,它指定了Qt的根目录,其它很多路径根据这个路径来指定 有一些路径会有一个默认值,比如lib,bin, 还有一些则没有,比如examples, demos

    三、解决方案

    鉴于此,下面给出一个可供参考的qt.conf模板

    [Paths]
    Prefix = /media/Disk/qt-everywhere-opensource-src-4.8.2
    Translations = translations
    Plugins = plugins
    Imports = imports
    Examples = examples
    Demos = demos

    剩下的问题是,每换一个地方,就要手动改一次,重复劳动实在有些不爽。下面提供两个分别针对Windows和Linux的脚本,编译完Qt之后,删掉最大的src目录,然后将此脚本置于根目录下即可。

    Windows版本: updateQt.bat

    ::
    :: this file should be placed in Qt root directory
    :: eg. if qmake.exe is in C:Qtin, 
    ::     this script should be in C:Qt
    ::
    :: Reference:http://www.cuteqt.com/blog/?p=149
    :: Reference:http://blog.csdn.net/jq0123/article/details/4325256
    
    REM get current directory
    REM and replace  with /
    SET PWD=%~dp0
    SET CONF=%PWD%inqt.conf
    SET PWD=%PWD:=/%
    
    
    echo [Paths]                      >%CONF%
    echo Prefix = %PWD%               >>%CONF%
    echo Translations = translations  >>%CONF%
    echo Examples = examples          >>%CONF%
    echo Demos = demos                >>%CONF%

    Linux版本: updateQt.sh

    #!/bin/bash
    
    function ScriptAbsolutePath() {
        DIR=$(dirname `which $0`)
        echo $DIR
    }
    
    Prefix=`ScriptAbsolutePath`
    Translations=translations
    Plugins=plugins
    Imports=imports
    Examples=examples
    Demos=demos
    
    CONF=$Prefix/bin/qt.conf
    echo [Paths]                       >$CONF
    echo Prefix = $Prefix             >>$CONF
    echo Translations = $Translations >>$CONF
    echo Plugins = $Plugins           >>$CONF
    echo Imports = $Imports           >>$CONF
    echo Examples = $Examples         >>$CONF
    echo Demos = $Demos               >>$CONF

    四、总结

    假如你编译了一个Qt库,那么你可以实施如下步骤:

    • 删除src目录,里面都是一些源码和临时文件。你还可以删除其它一些无关的目录,但都不大,无伤大雅。
    • 在根目录下编写脚本updateQt.bat或updateQt.sh,内容如下。
    • 每次将整个目录拷到其它地方时,执行一下脚本。
    • 将Qt的bin目录加到系统路径中去。这样,别的软件就能找到qmake,然后,它就能自动找到库文件(lib)和头文件(include)的位置。

    然后,你就得到了一个近似于绿色的Qt发行版。每换一次地方只需要执行一下脚本哦。

    注意:只针对Qt4,Qt3没这个机制。

    http://www.ituring.com.cn/article/5485

  • 相关阅读:
    MySQL锁的调试
    MySQL的分支与变种
    leetcode Merge Two Sorted Lists
    leetcode Next Permutation
    leetcode n后问题
    leetcode Remove Duplicates from Sorted List I && II
    leetcode minimum path sum
    leetcode simplify path
    leetcode ip地址组合
    leetcode path sum II
  • 原文地址:https://www.cnblogs.com/findumars/p/5582362.html
Copyright © 2011-2022 走看看