文章目录
前言
- 建议先看完这一篇【Qt4 设计师自定义控件】自动化打包(非常Elegance!)
接上篇,对于自动化打包,本人又做了一些改进:
- 去掉了打包工具自动重启Qt的功能(不安全)
- 简化了打包工具的输入(把designer和pluginPack的路径写死,只留下BasePath和PluginName)
- 给打包工具引入参数传递功能
- 新增外部工具:自动build四种kits,并打开打包工具
- 新增外部工具:自动引入外部lib
实现
打包工具的参数传递(完整代码去仓库查看)
在项目main函数中,接收我们传入的参数
#include "mainwindow.h"
#include <QApplication>
// 调用时,MyApp.exe 参数1 参数2
// 注意不需要传 argc
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 使用Qt自带的接收参数功能,安全可靠简洁
QStringList args = QCoreApplication::arguments();
// args = [MyApp.exe路径,参数1,参数2]
// 第一个值是这个函数自动返回的,我们用不着
MainWindow w(args);// 传给w,所以需要给构造函数添加参数
w.show();
return a.exec();
}
// 构造函数添加一个args
MainWindow::MainWindow(const QStringList &args, QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDir dir(pluginPack);
if (!dir.exists())dir.mkpath(".");
// 忽略args[0],把接收到的参数传给我们的 QLineEdit
if(args.size() == 3){
ui->basePath->setText(args[1]);
ui->pluginName->setText(args[2]);
}
}
配置到QtCreator外部工具中
这里我们添加了两个参数(注意参数需要空格隔开):
%{ActiveProject:NativePath} | %{ActiveProject:Name} |
---|---|
BasePath(构建目录的上一级,也就是BasePath/build) | 插件名称(使用pro文件名称命名) |
你可以通过这个来查看这些值。
build四种kits
创建bat文件
还是一样,我们需要把这个工具部署到QtCreator的外部工具中。这是一个批处理命令(bat
)
这里我直接给代码。(创建一个txt文件,把代码粘进去,改成bat文件)
@echo off
setlocal enabledelayedexpansion
rem === 读取参数 ===
set "PRO_FILE=%~1"
set "PRO_DIR=%~2"
set "PRO_NAME=%~3"
rem === 可配置路径 ===
rem == 你需要修改 ===
set "QMAKE_MINGW=D:\software\Qt\6.8.3\mingw_64\bin\qmake.exe"
set "QMAKE_MSVC=D:\software\Qt\6.8.3\msvc2022_64\bin\qmake.exe"
set "VCVARS=C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
set "JOM=D:\software\Qt\Tools\QtCreator\bin\jom\jom.exe"
rem === 创建构建目录结构 ===
rem === 你需要修改 ===
set "BUILD_BASE=%PRO_DIR%\build"
rem === 循环创建四个构建目录:MinGW-Debug MinGW-Release MSVC-Debug MSVC-Release ===
rem === 你需要修改 ===
for %%C in (MinGW-Debug MinGW-Release MSVC-Debug MSVC-Release) do (
set "SUBDIR=%BUILD_BASE%\%%C"
if not exist "!SUBDIR!" mkdir "!SUBDIR!"
)
rem === 执行构建(调用四次函数build_one,后面传了7个参数) ===
rem === 你需要修改参数3,使得和你前面创建的目录名字相同===
call :build_one "MinGW Debug" "%QMAKE_MINGW%" "%BUILD_BASE%\MinGW-Debug" "debug" "mingw32-make" 0 "%PRO_FILE%"
call :build_one "MinGW Release" "%QMAKE_MINGW%" "%BUILD_BASE%\MinGW-Release" "release" "mingw32-make" 0 "%PRO_FILE%"
call :build_one "MSVC Debug" "%QMAKE_MSVC%" "%BUILD_BASE%\MSVC-Debug" "debug" "%JOM%" 1 "%PRO_FILE%"
call :build_one "MSVC Release" "%QMAKE_MSVC%" "%BUILD_BASE%\MSVC-Release" "release" "%JOM%" 1 "%PRO_FILE%"
echo(
echo [DONE] 所有构建完成。准备启动打包工具...
=== build成功后,顺便打开打包工具,同时把项目参数传进去 ===
=== 你需要修改 ===
D:\software\Qt\Tools\myTools\packing\PluginPackagingTool.exe %PRO_DIR% %PRO_NAME%
exit /b 0
rem === 构建函数 ===
:build_one
setlocal
set "NAME=%~1"
set "QMAKE=%~2"
set "BUILDDIR=%~3"
set "CONFIG=%~4"
set "MAKE=%~5"
set "USE_VCVARS=%~6"
set "PRO_FILE=%~7"
echo.
echo [INFO] 开始构建:%NAME%
cd /d "%BUILDDIR%"
if "%USE_VCVARS%"=="1" (
call "%VCVARS%" >nul
)
if not exist "Makefile" (
echo [INFO] 执行 qmake ...
"%QMAKE%" "%PRO_FILE%" CONFIG+=%CONFIG%
if errorlevel 1 (
echo [ERROR] qmake 失败:%NAME%
exit /b 1
)
) else (
echo [INFO] 已存在 Makefile,跳过 qmake
)
%MAKE%
if errorlevel 1 (
echo [ERROR] make 失败:%NAME%
exit /b 1
)
echo [OK] %NAME% 构建成功
exit /b 0
如果输出中文出现乱码,就把bat文件另存为其它编码(UTF-8或者ANSI)
配置到QtCreator的外部工具中
路径 | |
---|---|
执行档 | D:\software\Qt\Tools\myTools\buildAll\build_all.bat (改成你自己的bat文件路径) |
参数 | %{ActiveProject:NativeFilePath} %{ActiveProject:NativePath} %{ActiveProject:Name} (激活项目pro文件路径,激活项目pro文件所在文件夹,激活项目pro文件名称) |
工作目录 | %{ActiveProject:NativePath} |
注意勾选
- 修改当前的文档
这个可以提示你,在构建之前保存被修改的文档,这很重要。
自动引入外部lib
创建bat文件
这其实就是一个十分简单的文本追加功能,但添加了一些简单的判断。
@echo off
setlocal enabledelayedexpansion
REM 获取参数(.pro 文件路径)
set "PRO_FILE=%~1"
REM 判断文件是否存在
if not exist "%PRO_FILE%" (
echo [ERROR] 文件不存在: %PRO_FILE%
exit /b 1
)
REM 判断是否包含 QT += widgets(允许任意空格)
findstr /R /C:"^ *QT *+= *widgets" "%PRO_FILE%" >nul
if errorlevel 1 (
echo [ERROR] 项目不是 Qt Widgets Application 类型,添加失败.
exit /b 0
)
REM 把要添加的内容通过输入方式赋值给LINE
set /p LINE=请输入要添加的内容
REM 查找标记是否已经存在
findstr /C:"%LINE%" "%PRO_FILE%" >nul
if %errorlevel% equ 0 (
echo [INFO] 添加完成(已存在)
exit /b 0
)
REM 添加一行到末尾
echo.>> "%PRO_FILE%"
echo %LINE%>> "%PRO_FILE%"
echo [SUCCESS] 添加完成
exit /b 0
配置到QtCreator外部工具中
把需要添加的文本写到 输入: 选项中。
这里的功能就是:
- 判断当前项目是否是 Qt Widgets Application 项目
- 如果是,在判断要添加的内容是否已存在
- 如果不存在,追加到pro文件中
- 成功把外部库引入