从命令行构建Qt Creator项目

22

我正在编写一个构建脚本,以自动化构建和发布任务。我有一个Qt Creator项目,其中有三个配置文件,其中两个我想完全从头重新构建,不使用任何预编译头文件和现有的.o文件进行跳过(release和release_production)。后者相同,只不过它定义了PRODUCTION符号。

我在使用Windows操作系统。如何从命令行构建这些配置?

编辑:澄清一下:Qt Creator自定义构建步骤未存储在qmake makefile中,而是存储在Qt Creator特定的.pro.user XML文件中。我希望在不重复脚本中的步骤的情况下,能够从命令行执行这些步骤。


不确定您是否有兴趣使用第三方工具,但我已成功地使用CMake来实现此目的。它允许在目录之外进行构建,因此我在单独的目录中构建了不同的配置。您可以简单地设置脚本以删除“release”和“release_production”目录,以确保它们从头开始重新构建。 - user258808
3个回答

18

这里有两个步骤:

  1. 运行 qmake 生成 Makefiles。通常的命令是

    c:\qt\4.7.2\bin\qmake.exe" path\to\some\project.pro -r -spec win32-g++ CONFIG+=...
    

    -spec开关非常重要。确保提供有效的makespec文件。CONFIG需要在此步骤中指定。

  2. 运行make进行编译和链接。这很容易。

  3. C:\MinGW32\bin\mingw32-make -f Makefile.Debug
    

    记得将make指向正确的构建文件。


谢谢,我写了类似的代码并且它可以工作。然而,这不完全是我想要的,请看我的编辑后的问题。 - Tamás Szelei

4
在QtCreator的项目选项卡中,你可以找到用于在调试和发布模式下构建项目的确切命令。只需在能够编译你的项目的环境(Qt console)中运行这些命令即可。但是,Qt项目通常使用qmake.exe然后使用nmake.exe或类似于Qt多线程的make工具jom.exe进行构建。
对于"production"模式,你可以在qmake命令中使用CONFIG+=production参数,然后在你的.pro文件中进行配置。
CONFIG(production){
DEFINES+=PRODUCTION
}else{
}

QtCreator --help 不显示任何参数,可以直接构建项目,就像你想要的那样... 这可能是一个很好的问题,适合向 QtCreator 的开发人员提出。 - Thomas Vincent
1
我认为你的建议很有趣,可以添加一个生产模式,以便在不同于我的程序所在机器上编译代码,因为库等文件没有在相同的位置。但是我似乎无法使其工作。我试图修改“CONFIG(production)”块中的“INCLUDEPATH”和“DEFINES”,但是当我尝试使用生成的Makefile进行编译时(使用带有“CONFIG+=production”的“qmake”参数生成),这些“INCLUDEPATH”和“DEFINES”并不符合我定义的要求。有任何想法吗? - Filip S.
没关系,在完全删除构建文件夹并从头开始重新构建后,问题已经解决了。 - Filip S.

3

为了使这个工作起来,有几个实际的细节是必要的。

你需要告诉编译器和资源处理器的位置。例如:

:: CL.EXE
PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
:: RC.EXE
PATH=%PATH%;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64

您需要定义包含路径和库路径:

SET INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include
SET LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\lib\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64

然后你可以这样做:
CD C:\Foo\build-your-project-Desktop_Qt_5_13_0_MSVC2017_64bit-Release
C:\Qt\Tools\QtCreator\bin\jom.exe /S -f Makefile.Release clean

C:\Qt\5.13.0\msvc2017_64\bin\qmake.exe -o Makefile ..\your-project\your-project-file.pro -spec win32-msvc "CONFIG+=qtquickcompiler"

C:\Qt\Tools\QtCreator\bin\jom.exe /S /X Build.log -f Makefile.Release

如果出现错误,请搜索头文件或库文件所在的路径,并将其添加到路径中。不断重复此过程,直到所有错误消失。

我很感谢您的回答,但这不是我要找的。请看一下编辑:在Qt Creator xml中定义的自定义构建步骤将不会以这种方式执行(虽然这是很多年前的事情了,现在Qt Creator可能已经有所不同...已经过了一段时间!) - Tamás Szelei
3
抱歉,我也这样做是为了其他正在搜索“在命令行中构建Qt Creator项目”的可怜家伙的利益。 - Pierre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接