利用buildroot构建含qt5的根文件系统后,需要提供一套能编译qt5应用程序的环境。下面就简单介绍一下怎么从buildroot中提取这个编译环境。
1、buildroot在构建完文件系统后会buildroot的顶层目录中生成一个output目录,目录中会根据make xxx_defconfig选择的项目来创建每个项目的输出文件。其中每个项目中的host文件夹的内容就包含构建qt5应用编译环境的所有内容(前提是编译buildroot的时候qt已经被选择)。
2、在/opt目录下创建一个qt-build文件夹,然后1中提到的host文件夹整个copy到/opt/qt-build中,注意这里是host文件夹和里面的内容而不只是文件夹中的内容,命令可以用cp -rdf xxx/host /opt/qt-build。如果要在不同的主机上创建环境建议先将host打包成tarball,然后copy到另一主机下进行解压,防止host中的一些符号连接在复制的过程中出错。
3、上面的操作完成后可以看看 /opt/qt-build/host/bin下有没有qmake程序,如果不存在就要去检查一下buildroot的编译,看是不是buildroot编译有问题。另外交叉编译工具链也存在于该目录下。
4、编辑和qmake在同一级目录下的qt.config文件,把里面的目录修改成/opt/qt-build,如下:
[Paths]
Prefix=/usr
HostPrefix=/opt/qt-build/host
Sysroot=/opt/qt-build/host/arm-buildroot-linux-gnueabihf/sysroot
Headers=/usr/include/qt5
Plugins=/usr/lib/qt/plugins
Examples=/usr/lib/qt/examples
5、在/opt/qt-build/host/mkspecs下检索之前buildroot的目录,将其全部替换成/opt/qt-build。在可在/opt/qt-build/host/mkspecs下执行下面命令实现替换。
sed -i "s/被替换的字符/opt\/qt-build/g" `grep 被替换的内容 -rl ./`
#注意:第一个“被替换的字符”填写的是builroot中那个host上一级的目录,且目录中的/前面需要加转义字符‘\’。第二个可以不加。
6、可以利用qt中提供的例程验证,cd到例程的工程目录下执行/opt/qt-build/host/bin/qmake xxx.pro && make。如果例程能正常编译所以打包的编译环境OK。将qt-build压缩成tarball后就可以分发给做应用的是使用过了。
7、生成的tarball在另一台主机上使用时必须解压到/opt目录下使用,如果要放在其它目录下需要再将qt.config和mkspecs中的路径做需改即可。
编译过程:
/opt/qt-build/host/bin/qmake xxx.pro
make
感谢下面文章提供的帮助:
https://wiki.t-firefly.com/zh_CN/Firefly-RK3288/buildroot_develop.html