最近在搭建Qt工程的编译服务器,需要通过shell脚本执行工程的编译过程,写在这里,总结最近的工作。
以Windows为例,在QtCreator中左侧选择“项目”便可以看到编译的指令和参数,这些操作也会在我们点击“构建项目”时执行,执行的过程可以在“编译输出”的窗口中看到,包含命令和编译的日志。
构建的步骤包含qmake和Make,有时也会用到Clean。我使用的命令也都基本来自于这里。
Make和Clean是依据Makefile文件进行的,而Makefile文件是qmake时生成的,所以第一步是qmake,那么在哪里执行qmake呢?
第一次我的做法是这样子的:
- cd 源码目录
-
- qmake xxx.pro #Makefile生成在源码目录
-
- cd ..
-
- mkdir build-xxx-Desktop_Qt_5_14_2... #创建影子编译的目录
- cd build-xxx-Desktop_Qt_5_14_2... #进入影子编译目录
-
- cp Makefile #从源码目录拷贝Makefile到影子编译目录
-
- /usr/bin/make -j8 #编译
这样的结果是,编译时候找不到xxx.pro文件,make失败。后经排查,发现在Makefile中Project字段有记录qmake对于xxx.pro文件的相对路径,所以先前qmake生成的Makefile文件中记录的xxx.pro是在当前目录中,后来拷贝至影子编译目录必然找不到所需资源。
于是我将步骤修改为先创建影子编译目录,在影子编译目录中qmake,Make……这样的顺序就是正确的。
- mkdir build-demo-Desktop_Qt_5_14_2_MinGW_64_bit-Release
- cd build-demo-Desktop_Qt_5_14_2_MinGW_64_bit-Release
-
- /Users/xxxx/Qt5.14.2/5.14.2/clang_64/bin/qmake -o Makefile /path/to/demo.pro -spec macx-clang CONFIG+=release CONFIG+=x86_64 CONFIG+=qtquickcompiler
-
- /usr/bin/make -j8
Windows相同,只需把编译工具替换:
D:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin\qmake.exe
D:\Qt\Qt5.14.2\Tools\mingw730_32\bin\mingw32-make.exe
在MacOS上打包,使用的是Packages工具。
下载地址:
用户手册:
因为是给服务器使用,所以重点放在如何在命令行中调用工具打包。在用户手册第10章节有介绍 Packages - Building a project (free.fr)
$ /usr/local/bin/packagesbuild --project /path/to/the/project.pkgproj