【Qt4 设计师自定义控件】自动化打包2(非常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文件中
  • 成功把外部库引入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phshp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值