只需在项目文件中 包含一段代码便可在编译完成时 自动打包程序的依赖库。(文末源码地址)
QT
变量获取对应模块,在打包时候将会有选择地打包。windeployqt.exe
)的参数命令。有关功能使用在脚本工具中有详细描述。git
debug
与release
配置变量,这样会致使qmake很慢,本脚本工具能够优化qmake运行速度,但默认不开启,由于它是实验性功能。# 获取从QMake执行文件的所在目录得出Qt的bin路径 QT_BIN_DIR = $$replace(QMAKE_QMAKE, ^(\S*/)\S+$, \1) # 获取Qt开发环境路径 QT_DIR = $${QT_BIN_DIR}../ # Qt打包工具参数配置集合 DEPLOY_OPTIONS += --force # 可用的Qt模块 QT_AVAILABLE_LIBRARY_LIST = \ bluetooth concurrent core declarative designer designercomponents enginio \ gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc \ opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets \ script scripttools sensors serialport sql svg test webkit webkitwidgets \ websockets widgets winextras xml xmlpatterns webenginecore webengine \ webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation \ 3dextras geoservices webchannel texttospeech serialbus webview # 扫描QT变量用于打包模块的参数配置 for (LIBRARY_MODULE, QT_AVAILABLE_LIBRARY_LIST) { if (contains(QT, $$LIBRARY_MODULE)) { DEPLOY_OPTIONS += --$$LIBRARY_MODULE } else { DEPLOY_OPTIONS += --no-$$LIBRARY_MODULE } } # 针对Qml模块配置打包参数 if (contains(QT, quick)) { DEPLOY_OPTIONS -= --no-qml DEPLOY_OPTIONS += --qml DEPLOY_OPTIONS -= --no-network DEPLOY_OPTIONS += --network DEPLOY_OPTIONS += --qmldir $${QT_DIR}qml/ } if (!isEmpty(DESTDIR)) { # 若有设置目标输出路径则定向于该路径 TARGET_OUT_DIR = $$OUT_PWD/$$DESTDIR/ } else { # 判断是debug版本仍是release版本 CONFIG(debug, debug|release) { TARGET_OUT_DIR = $${OUT_PWD}/debug/ DEPLOY_OPTIONS += --debug } else { TARGET_OUT_DIR = $${OUT_PWD}/release/ DEPLOY_OPTIONS += --release } } # 实验性功能 !isEmpty(EXPERIMENTAL) { # 该功能(用于优化qmake调试输出)是否开放还需待定,由于会致使其余未知的问题。 CONFIG = $$remove_extra_config_parameter($$CONFIG) } # 调试输出 !isEmpty(DEBUG_LOGGER) { message(TARGET_OUT_DIR: $$TARGET_OUT_DIR) # 生成文件的输出目录 message(QMAKE_POST_LINK: $$QMAKE_POST_LINK) # 打印命令 } win32 { # 拼接Qt部署程序的文件(windows平台下为windeployqt.exe) WIN_DEPLOY_BIN = $${QT_BIN_DIR}windeployqt.exe # 编译完成后执行打包命令 QMAKE_POST_LINK += $$WIN_DEPLOY_BIN $$DEPLOY_OPTIONS $$TARGET_OUT_DIR$${TARGET}.exe # 扫描Qml依赖库,并在编译完成后自动复制qml依赖库到目标目录 QMAKE_POST_LINK += $$get_copy_qml_library_cmd_line($$QT_DIR, $$QT_BIN_DIR, $$TARGET_OUT_DIR, $$RESOURCES) !isEmpty(DEPLOY_COMPLETE_AUTO_OPEN_EXPLORER) { # 打包完成后自动打开目标路径 QMAKE_POST_LINK += && start $$TARGET_OUT_DIR } }
欢迎你们一块儿协做完善。
https://github.com/aeagean/De...github