用户名: 密码: 忘记密码? 注册

同一台机器上实现不同版本的Qt的编译方法

作者:  时间: 2010-11-03
大家都知道,编译不同版本的Qt程序,最主要的区别就是:各个版本的所依赖的库、交叉编译器不同。那么如何实现编译不同版本的程序在同一台机子上,以下是实现自己的方法,供大家借鉴!
首先我的环境如下:
1、平台:fedora11
   arm-linux-gcc安装路径:/usr/local/arm/4.3.2
   各版本Qt安装路径:/usr/local/Trolltech/QtEmbedded-4.5.2-arm(arm体系结构);
                  /usr/local/Trolltech/Qt-4.5.2/(X-86体系结构);
                  /usr/local/Trolltech/QtopiaCore-4.3.2(基于arm的qtopia);
2、方法一:是改变系统的环境变量:(这里只针对QtopiaCore-4.3.2配置,其他如同此法)
   在/etc/profile中添加如下(配置编译环境所需的库)
    PATH=/usr/local/Trolltech/QtopiaCore-4.3.2/bin:$PATH                                        
    LD_LIBRARY_PATH=/usr/local/Trolltech/QtopiaCore-4.3.2/lib:$LD_LIBRARY_PATH
    export PATH
    export LD_LIBRARY_PATH
   在/root/ ~/.bashrc中添加如下(配置编译环境所需的交叉编译器)
    export PATH=/usr/local/arm/3.4.1/bin:$PATH
   注意:这里的交叉编译器路径应为你在编译和安装Qt时在qmake.conf中设置的交叉编译器的路径。当Qt安装好后,生成的qmake会根据当时的配置文件中的路径去调用交叉编译器,如果两者的路径不一致,则执行qmake是会找不到相应的交叉编译器。具体的设置方法如下:
   进到Qt源码包下的mkspecs/qws/linux-arm-g++/;
   打开qmake.conf;
   把所有的 arm-linux- 修改为:/usr/local/arm/3.4.1/bin/arm-linux- 后保存
   我的配置如下:
  2# qmake configuration for building with arm-linux-g++
 3 #
 4
  5 include(../../common/g++.conf)
  6 include(../../common/linux.conf)
  7 include(../../common/qws.conf)
 8
  9 # modifications to g++.conf
 10 QMAKE_CC                = /usr/local/arm/4.3.2/bin/arm-linux-gcc
 11 QMAKE_CXX               = /usr/local/arm/4.3.2/bin/arm-linux-g++
 12 QMAKE_LINK              = /usr/local/arm/4.3.2/bin/arm-linux-g++
 13 QMAKE_LINK_SHLIB        = /usr/local/arm/4.3.2/bin/arm-linux-g++
 14
 15 # modifications to linux.conf
 16 QMAKE_AR                = /usr/local/arm/4.3.2/bin/arm-linux-ar cqs
 17 QMAKE_OBJCOPY           = /usr/local/arm/4.3.2/bin/arm-linux-objcopy
 18 QMAKE_STRIP             = /usr/local/arm/4.3.2/bin/arm-linux-strip
 19
 20 load(qt_config
     这样编译好Qt就会去调用相对应的交叉编译器。
3.方法二:不改变系统的环境变量,而是在不同工作目录下编写一个脚本,当需要改变环境变量时,只要执行不同脚本就会改变当前系统的环境变量。
下面是我的脚本:
X-86:
     PATH=/usr/local/Trolltech/Qt-4.5.2/bin:$PATH                                                
     LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.5.2/lib:$LD_LIBRARY_PATH
     export PATH
     export LD_LIBRARY_PATH

arm-QtE:
    QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.2-arm                                             
    QPEDIR=/usr/local/Trolltech/QtEmbedded-4.5.2-arm
    PATH=`pwd`/bin:$PATH
    LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/Trolltech/QtEmbedded-4.5.2-arm/lib:$LD_LIBRARY_PATH
    export PATH
    export LD_LIBRARY_PATH
    export PATH=$PATH:/usr/local/arm/4.3.2/bin(这里是编译arm平台的,所以要加上交叉编译器环境)

arm-Qtoia:
    QTEDIR=/usr/local/Trolltech/QtopiaCore-4.3.2                                                
    PATH=/usr/local/Trolltech/QtopiaCore-4.3.2/bin:$PATH
    LD_LIBRARY_PATH=/usr/local/Trolltech/QtopiaCore-4.3.2/lib:$LD_LIBRARY_PATH
    export PATH
    export LD_LIBRARY_PATH
    export PATH=$PATH:/usr/local/arm/4.3.2/bin

将以上写在setenv.sh中,在每次编译前只要执行该脚本就可以改变环境;
可以通过echo $PATH查看当前的环境变量:
当执行qtopia下的脚本后,我的环境如下:
/usr/local/Trolltech/QtopiaCore-4.3.2/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/home/lieying/bin:/usr/local/arm/4.3.2/bin
很显然已经改成我需要的环境了。

总结:显然方法二比方法一更方便,只需要执行相应目录环境下的脚本就可改变环境。