大家都知道,编译不同版本的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
很显然已经改成我需要的环境了。
总结:显然方法二比方法一更方便,只需要执行相应目录环境下的脚本就可改变环境。
同一台机器上实现不同版本的Qt的编译方法
作者: macker1989 发布时间: 2010-11-03