使用 VS2017的编译器编译qt的pro工程。
Windows 10 + VS2017 + Qt 5.12.9
E:
T--test
|--compile_cmd.bat 编译脚本
|--testapp 测试工程目录
|--main.cpp
|--testapp.pro
说明:
编译中间输出目录为msvc_x64_output
编译版本为 qt 64位版本
具体脚本说明请查看注释。
// compile_cmd.bat
:: 关闭终端回显
:: @echo off
:: 创建中间文件输出目录
if not exist msvc_x64_output (
mkdir msvc_x64_output
)
:: 打开终端回显
@echo on
:: 引入msvc编译环境, 请根据自己的vs安装目录更改vcvarsall.bat脚本所在位置,下面的命令为VS2017的
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
@echo on
:: 进入中间文件输出目录并执行qt工程编译
cd msvc_x64_output
:: 若存在Makefile清,则理上一次编译的中间文件
if exist ./Makefile (
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" clean
)
:: ../testapp/testapp.pro 为pro文件路径,可使用相对路径,也可使用绝对路径
:: "D:\Qt\Qt5.12.9\5.12.9\msvc2017_64\bin\qmake.exe" 为 x64 版本
:: 若想编译 32 位版本,请更改qmake.exe的路径, 例如
:: "D:\Qt\Qt5.12.9\5.12.9\msvc2017\bin\qmake.exe" -spec win32-msvc ../testapp/testapp.pro
"D:\Qt\Qt5.12.9\5.12.9\msvc2017_64\bin\qmake.exe" -spec win32-msvc ../testapp/testapp.pro
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -f ./Makefile qmake_all
:: 编译debug版本
:: 指定4核编译
:: "D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -j4 -f ./Makefile.Debug
:: 不指定编译核数
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -f ./Makefile.Debug
:: 编译release版本
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -f ./Makefile.Release
pause
jom的备注(此处摘录的他人的理解):
linux下使用make,而在windows上面使用nmake,是vs提供的一个东西,
但是有很个坑的事,就是nmake不支持-j这个参数,也是就是说它是单线程编译.
Qt为了解决这样子的一个问题,弄出一个jom.exe,这和make的功能基本是一样的,但是他比nmake多出来的就是,-j这个参数.也就是说它支持多线程编译.
至于和make的其他区别我也不清楚,如果你不特别追究的话,简单理解为 jom == make == nmake*x
在本次测试过程中,使用Qt Creator
做了几次编译测试,顺手把Qt Creator
的编译过程也记录了一下。
Qt Creator 4.12.2 (Community)
执行重新构建
时,Qt Creator 执行的编译命令执行记录如下:
[x86] [debug]
// 编译环境的工作路径在 E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_32bit-Debug
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" clean
"D:\Qt\Qt5.12.9\5.12.9\msvc2017\bin\qmake.exe" E:\TestProj\testlib\staticlib\staticlib.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -f E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_32bit-Debug/Makefile qmake_all
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe"
[x86] [release]
// 编译环境的工作路径在 E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_32bit-Release
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" clean
"D:\Qt\Qt5.12.9\5.12.9\msvc2017\bin\qmake.exe" E:\TestProj\testlib\staticlib\staticlib.pro -spec win32-msvc "CONFIG+=qtquickcompiler"
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -f E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_32bit-Release/Makefile qmake_all
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe"
[x64] [debug]
// 编译环境的工作路径在 E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" clean
"D:\Qt\Qt5.12.9\5.12.9\msvc2017_64\bin\qmake.exe" E:\TestProj\testlib\staticlib\staticlib.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -f E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug/Makefile qmake_all
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe"
[x64] [release]
// 编译环境的工作路径在 E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_64bit-Release
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" clean
"D:\Qt\Qt5.12.9\5.12.9\msvc2017_64\bin\qmake.exe" E:\TestProj\testlib\staticlib\staticlib.pro -spec win32-msvc "CONFIG+=qtquickcompiler"
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe" -f E:/TestProj/testlib/build-staticlib-Desktop_Qt_5_12_9_MSVC2017_64bit-Release/Makefile qmake_all
"D:\Qt\Qt5.12.9\Tools\QtCreator\bin\jom.exe"
本文档示例工程以上传至CSDN,资源路径为:
https://download.csdn.net/download/shadow_2011/36157689