echo off setlocal call C:\software\Qt5.5.1\5.5\mingw492_32\bin\qtenv2.bat cd /d D:\project\zhzh\ChartApp C:\software\Qt5.5.1\5.5\mingw492_32\bin\qmake.exe ChartApp.pro -spec win32-g C:\software\Qt5.5.1\Tools\mingw492_32\bin\mingw32-make.exe %* if errorlevel 1 exit /b 1 if exist bin\ChartApp.exe ( C:\software\Qt5.5.1\5.5\mingw492_32\bin\windeployqt.exe --release --no-translations bin\ChartApp.exe ) echo Build OK: ChartApp\bin\ChartApp.exe echo Enclib: ..\Enclib_windows\Enclib endlocal参考文件:Windows 批处理文件 xxx.bat-CSDN博客这个.bat文件是一个Qt 项目的编译构建脚本用于在 Windows 下使用 MinGW 编译器编译ChartApp.pro项目并自动部署所需的 Qt 运行库。第 1 行echo off关闭命令回显执行时不显示每行命令本身让输出更清爽。第 2 行setlocal开始局部环境变量作用域后续设置的变量和路径修改只在脚本内有效不影响系统全局环境。第 3 行call C:\software\Qt5.5.1\5.5\mingw492_32\bin\qtenv2.batcall用于调用另一个批处理文件并等待它执行完毕后返回继续执行当前脚本。qtenv2.bat是 Qt 自带的环境配置脚本它会自动设置 Qt 相关的环境变量如PATH、QTDIR等让后续的qmake、mingw32-make等命令能够找到对应的库和工具。如果不用call直接写路径脚本会跳转到那个 BAT 文件执行且不再返回后面的命令都不会执行。第 4 行cd /d D:\project\zhzh\ChartApp切换到项目源码根目录ChartApp.pro所在的位置。第 5 行C:\software\Qt5.5.1\5.5\mingw492_32\bin\qmake.exe ChartApp.pro -spec win32-g调用qmake生成 Makefile。ChartApp.pro是 Qt 项目文件。-spec win32-g指定使用 MinGW 编译器而不是 MSVC。执行后会在当前目录生成Makefile和Makefile.Debug/Makefile.Release等文件。第 6 行C:\software\Qt5.5.1\Tools\mingw492_32\bin\mingw32-make.exe %*调用mingw32-makeMinGW 的 make 工具根据刚才生成的 Makefile 进行编译和链接。%*表示将调用本脚本时传入的所有参数原样传递给 make。例如如果你执行build.bat -j4那么-j4会被传给 make实现多核并行编译。如果编译过程中出错mingw32-make会返回非零错误码。第 7 行if errorlevel 1 exit /b 1errorlevel是上一条命令的返回值mingw32-make的退出码。如果errorlevel 1即编译失败立即退出脚本并返回1表示失败。/b 1表示退出当前批处理脚本而不是关闭整个 CMD 窗口返回码为1。第 8-10 行if exist bin\ChartApp.exe ( ... )检查编译出的可执行文件bin\ChartApp.exe是否存在。如果存在则执行windeployqt.exeQt 官方部署工具--release只部署Release 版本的库不包含 Debug 版本。--no-translations不复制翻译文件.qm文件。bin\ChartApp.exe指定目标 exe 文件。windeployqt会自动将程序依赖的 Qt 核心库如Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll等和必要的插件如 platforms 目录复制到bin目录下让 exe 可以在没有安装 Qt 的电脑上直接运行。第 11 行echo Build OK: ChartApp\bin\ChartApp.exe输出构建成功的提示信息告诉用户生成的可执行文件位置。第 12 行echo Enclib: ..\Enclib_windows\Enclib输出一个额外的提示信息可能用于提醒依赖库Enclib的位置Enclib_windows可能是加密或底层库。这只是输出文字并没有实际复制或操作该库。第 13 行endlocal结束setlocal开启的局部环境恢复脚本执行前的环境变量状态包括PATH等。为了适配我的电脑我安装的是Qt5.12.8)我修改了下脚本内容:rem echo off rem setlocal call D:\Qt\Qt5.12.8\5.12.8\mingw73_32\bin\qtenv2.bat cd /d D:\QtCode\zhzhv1\ChartApp D:\Qt\Qt5.12.8\5.12.8\mingw73_32\bin\qmake.exe ChartApp.pro -spec win32-g D:\Qt\Qt5.12.8\Tools\mingw730_32\bin\mingw32-make.exe %* if errorlevel 1 exit /b 1 if exist bin\ChartApp.exe ( D:\Qt\Qt5.12.8\5.12.8\mingw73_32\bin\windeployqt.exe --release --no-translations bin\ChartApp.exe ) echo Build OK: ChartApp\bin\ChartApp.exe echo Enclib: ..\Enclib_windows\Enclib rem endlocal pause运行了下程序没有什么问题可以正常运行。我执行.bat直接双击但这样看不了打印信息啊在文件末尾加pause最简单在脚本最后一行加上pause窗口就会停留在“按任意键继续...”的状态
阅读完成 · 觉得有帮助?