一个交叉编译Qt5.9的脚本示例( 静态编译)
静态编译Qt
#配置Qt 可以参考我的另一篇文章,详细参数讲解 Qt源码编译configure配置参数
#!/bin/sh
#交叉编译QT
AW_LICHEE_ROOT=$PWD/../../../
#当前目录作为构建目录
export QT_BUILD_ROOT=$PWD
#编译后QT安装目录
export QT_INSTALL_DIR=$QT_BUILD_ROOT/Qt-5.9.0
#配置交叉编译工具链 软连接到 /home/wmx/odm_yb/out/sun8iw11p1/linux/common/buildroot/host/opt/ext-toolchain/bin
export PATH=$AW_LICHEE_ROOT/out/sun8iw11p1/linux/common/buildroot/host/usr/bin/:$PATH
#配置sysroot (按照 linux 的标准目录结构查找头文件目录和库文件目录)
export SYSROOT=$AW_LICHEE_ROOT/out/sun8iw11p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot
#配置交叉编译工具链
export CROSS_COMPILE_DIR=$AW_LICHEE_ROOT/out/sun8iw11p1/linux/common/buildroot/host/opt/ext-toolchain
#交叉编译工具链集合
export CROSS_COMPILE=$CROSS_COMPILE_DIR/arm-linux-gnueabi-
#在Qt5时代,QtQuick2 使用的是OpenGL。
#这样一来,Windows下面的问题就出来了:Windows下的显卡驱动支持的是DirectX,默认带的OpenGL版本非常低,基本不能用。
#要解决这个问题,有两种方式:
#1. 确保你安装了支持OpenGL 2 或以上版本的显卡驱动。
#2. 使用Angle将DirectX封装一下,模拟出一套OpenGL接口。
# 至于哪种方式好,自己选。
export CPLUS_INCLUDE_PATH=$PWD/qtbase/src/3rdparty/angle/include:$CPLUS_INCLUDE_PATH
#
export QMAKEDIR=$QT_BUILD_ROOT/qmake
#
export PATH=$CROSS_COMPILE_DIR:$QT_INSTALL_DIR/bin:$PATH
function cqtroot
{
cd $QT_BUILD_ROOT
}
#配置Qt 可以参考我的另一篇文章,详细参数讲解 Qt源码编译configure配置参数
function makeconfig
{
#复制gpu库到sysroot 提供编译Qt的依赖库
cp $AW_LICHEE_ROOT/tools/pack/chips/sun8iw11p1/hal/gpu/fbdev/lib/* $SYSROOT/lib/ -rf
mkdir -p $QT_INSTALL_DIR
$QT_BUILD_ROOT/configure \
-opensource \
-confirm-license \
-extprefix $QT_INSTALL_DIR \
-no-strip \
-c++std c++11 \
-static \
-nomake examples \
-accessibility \
-no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci \
-no-sql-odbc -no-sql-psql -no-sql-sqlite2 -no-sql-tds \
-no-sql-sqlite -plugin-sql-sqlite \
-no-qml-debug \
-no-sse2 \
-no-sse3 \
-no-ssse3 \
-no-sse4.1 \
-no-sse4.2 \
-no-avx \
-no-avx2 \
-no-mips_dsp \
-no-mips_dspr2 \
-qt-zlib \
-no-journald \
-qt-libpng \
-qt-libjpeg \
-qt-freetype \
-qt-harfbuzz \
-no-openssl \
-no-xinput2 \
-no-xcb-xlib \
-no-glib \
-no-pulseaudio \
-alsa \
-gui \
-widgets \
-v \
-optimized-qmake \
-no-cups \
-no-iconv \
-evdev \
-no-icu \
-no-fontconfig \
-no-strip \
-pch \
-dbus \
-no-use-gold-linker \
-xplatform linux-arm-gnueabi-g++ \
-no-directfb \
-eglfs \
-qpa eglfs \
-linuxfb \
-no-kms \
-sysroot $SYSROOT \
-opengl es2 \
-no-system-proxies \
-no-slog2 \
-no-pps \
-no-imf \
-no-lgmon \
-tslib \
-gstreamer \
-device-option CROSS_COMPILE=$CROSS_COMPILE
}
##构建
function makeall
{
make -j2 -C $QT_BUILD_ROOT
}
##安装
function makeinstall
{
#本函数使用局部变量 QT_TARGET_INSTALL
local QT_TARGET_INSTALL=$AW_LICHEE_ROOT/out/sun8iw11p1/linux/common/buildroot/target/usr/local/Qt-5.9.0
#构建qt安装目录
mkdir -p $QT_TARGET_INSTALL
#拷贝编译生成的Qt examples lib plugins qml translations 到安装目录
cp -rf $QT_INSTALL_DIR/examples \
$QT_INSTALL_DIR/lib $QT_INSTALL_DIR/plugins $QT_INSTALL_DIR/qml \
$QT_INSTALL_DIR/translations $QT_TARGET_INSTALL
#拷贝gpu库到目标平台对应目录 ,target 目录被打包成目标系统升级包
cp $AW_LICHEE_ROOT/tools/pack/chips/sun8iw11p1/hal/gpu/fbdev/lib/* $AW_LICHEE_ROOT/out/sun8iw11p1/linux/common/buildroot/target/usr/lib/ -rf
cp $AW_LICHEE_ROOT/tools/pack/chips/sun8iw11p1/hal/gpu/fbdev/bin/* $AW_LICHEE_ROOT/out/sun8iw11p1/linux/common/buildroot/target/bin/ -rf
make -C $QT_BUILD_ROOT install
}
##清除
function makecleanall
{
make -C $QT_BUILD_ROOT clean
rm -rf $QT_INSTALL_DIR
rm -rf $AW_LICHEE_ROOT/out/sun8iw11p1/linux/common/buildroot/target/usr/local/Qt-5.9.0
cd $QT_BUILD_ROOT
rm -rvf .qmake.super \
Makefile \
qtactiveqt/.qmake.cache \
qtactiveqt/Makefile \
##省略……一系列的生成文件或 makefile文件
##自己补上哈……
cd -
}