如何使用QMake实现Windows下多编译选项的项目多版本自动化构建
基于QMake的Windows多版本自动化构建实现方案
1. 项目配置文件(.pro)修改
核心实现版本参数识别、宏定义注入、产物命名区分和编译目录隔离,避免不同版本编译缓存串扰:
# 识别qmake传入的版本参数 CONFIG(trial) { # 注入试用版预编译宏,用于裁剪专业版代码 DEFINES += APP_TRIAL_VERSION # 统一版本后缀,所有产物自动继承 VERSION_SUFFIX = _trial # 独立构建输出目录,隔离中间文件和最终产物 DESTDIR = $$PWD/build_trial OBJECTS_DIR = $$DESTDIR/obj MOC_DIR = $$DESTDIR/moc RCC_DIR = $$DESTDIR/rcc UI_DIR = $$DESTDIR/ui } else { # 专业版默认配置 DEFINES += APP_PRO_VERSION VERSION_SUFFIX = _pro DESTDIR = $$PWD/build_pro OBJECTS_DIR = $$DESTDIR/obj MOC_DIR = $$DESTDIR/moc RCC_DIR = $$DESTDIR/rcc UI_DIR = $$DESTDIR/ui } # 目标产物自动加上版本后缀,原有打包规则无需修改命名逻辑 TARGET = YourAppName$$VERSION_SUFFIX # 原有代码归档、portable压缩包、安装包生成规则直接保留即可
代码中使用预编译宏裁剪专业版功能示例:
// 专业版专属功能,试用版编译时会完全剔除 #ifdef APP_PRO_VERSION void exportProfessionalReport() { // 专业版业务逻辑 } #endif
2. Windows自动化多轮构建脚本
编写批处理脚本一次性完成两个版本的全流程构建,无需手动切换参数:
@echo off setlocal :: 替换为你本地Qt编译套件对应的路径 set QMAKE_PATH=C:\Qt\5.15.2\msvc2019_64\bin\qmake.exe :: MSVC套件用jom实现多线程编译,MinGW套件替换为mingw32-make.exe路径 set MAKE_TOOL=C:\Qt\Tools\QtCreator\bin\jom.exe :: 编译套件spec参数,MinGW替换为win32-g++ set SPEC=win32-msvc :: 构建专业版 echo ============== 开始构建专业版 ============== if exist build_pro rd /s /q build_pro mkdir build_pro cd build_pro %QMAKE_PATH% ..\你的项目名.pro CONFIG+=pro -spec %SPEC% %MAKE_TOOL% clean %MAKE_TOOL% all %MAKE_TOOL% install cd .. :: 构建试用版 echo ============== 开始构建试用版 ============== if exist build_trial rd /s /q build_trial mkdir build_trial cd build_trial %QMAKE_PATH% ..\你的项目名.pro CONFIG+=trial -spec %SPEC% %MAKE_TOOL% clean %MAKE_TOOL% all %MAKE_TOOL% install cd .. echo ============== 所有版本构建完成 ============== pause
注意事项
- 原有打包规则只要是基于
TARGET变量命名产物,会自动带上版本后缀,无需额外修改 - 必须为不同版本配置独立的中间文件目录,否则qmake会复用已编译的缓存文件,导致预编译宏不生效
- 若使用NSIS、Inno Setup等工具生成安装包,可直接在打包脚本中根据构建目录区分产物命名,或读取qmake的
VERSION_SUFFIX变量拼接名称
内容的提问来源于stack exchange,提问作者Jeroen3
相关产品推荐
相关产品推荐

