Qt交叉编译
Qt的伟大之处在于它的跨平台性。不仅跨桌面,也跨设备。Qt的构建工具qmake可以通过配置使用不同的编译器和不同的设置,为不同的架构进行交叉编译。如何做到这一切相当简单,但你需要知道如何开始。
当你下载并解压Qt后,你会发现一个带有大量选项的configure脚本。第一次尝试控制它们可能感觉不知所措,所以最好知道接下来会发生什么。
当你运行configure时,构建工具qmake被构建,包含配置信息。这意味着你可以为不同的构建目标拥有多个qmake二进制文件。然后QMake用于为目标构建Qt。
Qt是由一组模块构建的,这些模块是独立的库。这意味着你不需要在配置时决定使用哪些模块。相反,只需构建所有内容,稍后再做决定(在你的项目文件中使用QT变量 - 这不在本文的范围内)。同样适用于插件(数据库驱动程序、图像格式等)。
重要的是你想静态还是动态地构建Qt,是否想使用平台库来实现各种功能(libjpeg、zlib、libpng等)。另一个重要且不太直接的配置选项是使用的编译器。这由所谓的mkspec - 一个make规范来控制。
Qt自带了相当多的准备好的mkspec,但稍微调整它们并不罕见。它们都保存在Qt的mkspec子目录中,另一个用于嵌入式目标的子目录称为qws。该规范包含文件qmake.conf和qplatformdefs.h。后者在Linuxes之间重用起来非常容易。它为底层系统定义了许多结构和函数。前者qmake.conf告诉qmake如何编译。
一旦找到文件,阅读它就很简单了。例如,QMAKE_CXX变量应该列出要使用的C++编译器,QMAKE_CXXFLAGS列出了调用C++编译器时使用的标志,等等。
完成所有这些设置后,只需使用-xplatform来指定要使用的规范。该参数使用mkspec目录作为基础,因此要使用$(QTDIR)/mkspec/qws/linux-arm-g++指定-xplatform qws/linux-arm-g++.
最后,添加参数-nomake demos和-nomake examples可以节省大量时间。