【笔记】Qt程序在Windows、OS X、CentOS、Ubuntu下的打包处理

本文详细介绍了如何在Windows、OS X、CentOS和Ubuntu下打包Qt程序,包括使用windeployqt、macdeployqt、rpmbuild和dpkg工具,以及创建启动脚本和桌面快捷方式。每个平台的打包步骤和所需文件均有详述,为Qt程序的多平台部署提供参考。
摘要由CSDN通过智能技术生成

主程序名 web_transmit_adapter


Windows:

打包主目录windows:包含子目录web_transmit_adapter和两个打包文件web_transmit_adapter.nsi、和packing.bat

而在web_transmit_adapter子目录中包含了Qt程序web_transmit_adapter.exe以及一些依赖的第三方库文件等

发布Qt程序时,需要额外拷贝一些Qt库文件:

使用命令行可以拷贝需要依赖的Qt库文件,“C:\Qt\Qt5.5.1\5.5\msvc2010\bin\windeployqt.exe --release E:\CODES\yanrk\web_transmit_adapter\bin\windows\dll_release”


使用NSIS来做安装包,web_transmit_adapter.nsi内容如下:

; Script generated by the HM NIS Edit Script Wizard.

; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "web_transmit_adapter"
!define PRODUCT_VERSION "2.0.16.824"
!define PRODUCT_PROTOCOL "RayvisionWeb"
!define PRODUCT_PUBLISHER "Shenzhen Rayvision Technology Co., Ltd."
!define PRODUCT_WEB_SITE "http://www.rayvision.com"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_STARTUP_KEY "Software\Microsoft\Windows\CurrentVersion\Run"

; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "x64.nsh"
!include "WordFunc.nsh"

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; Welcome page
!insertmacro MUI_PAGE_WELCOME
!define MUI_COMPONENTSPAGE ;元件页面
; Directory page
!insertmacro MUI_PAGE_DIRECTORY

; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN_TEXT "$(StartProgram)"
!define MUI_FINISHPAGE_RUN "$INSTDIR\web_transmit_adapter.exe"
!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES

; Language files
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "English"

; Set name using the normal interface (Name command)
LangString Name ${LANG_ENGLISH} "English"
LangString Name ${LANG_SIMPCHINESE} "简体中文"
LangString Title ${LANG_ENGLISH} "web_transmit_adapter"
LangString Title ${LANG_SIMPCHINESE} "web_transmit_adapter"
LangString Language ${LANG_ENGLISH} "english"
LangString Language ${LANG_SIMPCHINESE} "chinese"
LangString RemoveTip ${LANG_ENGLISH} "Has been successfully removed from your computer."
LangString RemoveTip ${LANG_SIMPCHINESE} "已成功地从你的计算机移除。"
LangString RunName ${LANG_ENGLISH} "web_transmit_adapter"
LangString RunName ${LANG_SIMPCHINESE} "web_transmit_adapter"
LangString RunExe ${LANG_ENGLISH} "web_transmit_adapter.exe"
LangString RunExe ${LANG_SIMPCHINESE} "web_transmit_adapter.exe"
LangString AlreadyInstall ${LANG_ENGLISH} "You already have an version of client installed,"
LangString AlreadyInstall ${LANG_SIMPCHINESE} "检测到本机已经安装了${PRODUCT_NAME},"
LangString InstallInfo ${LANG_ENGLISH} "Do you want to uninstall it before setup?"
LangString InstallInfo ${LANG_SIMPCHINESE} "是否先卸载已安装的版本?"
LangString StartProgram ${LANG_ENGLISH} "Start $(Title)"
LangString StartProgram ${LANG_SIMPCHINESE} "运行 $(Title)"

; First is default
;LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
;LoadLanguageFile "${NSISDIR}\Contrib\Language files\SimpChinese.nlf"

; MUI end ------

;Name "${PRODUCT_NAME} ${PRODUCT_VERSION} $(Name)"
Name "$(Title) ${PRODUCT_VERSION} $(Name)"
OutFile "..\..\release\web_transmit_adapter_setup.exe"
;RequestExecutionLevel admin ; user 或者 admin ;注册表需要管理员权限
InstallDir ""
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
AllowRootDirInstall true

Var lang
Function .onInit
    ReadRegStr $R0 HKLM ${PRODUCT_UNINST_KEY} "UninstallString"
    StrCmp $R0 "" done

    MessageBox MB_YESNOCANCEL|MB_ICONQUESTION  "$(AlreadyInstall) $\n$\n $(InstallInfo)" \
      /SD IDYES \
      IDYES uninstall \
      IDNO done
    Abort

uninstall:
    ClearErrors
    ExecWait '$R0 _?=$INSTDIR'
    ;Exec $INSTDIR\uninst.exe

done:
    ${If} ${RunningX64}
        StrCpy $InstDir "D:\Program Files (x86)"
    ${Else}
        StrCpy $InstDir "D:\Program Files"
    ${EndIf}

    Push Verdana
    Push 9
    ;Language selection dialog
    Push ""
    Push ${LANG_ENGLISH}
    Push English
    Push ${LANG_SIMPCHINESE}
    Push "Simplified Chinese"
    Push A ; A means auto count languages
           ; for the auto count to work the first empty push (Push "") must remain
    LangDLL::LangDialog "Installer Language" "Please select the language of the installer"

    Pop $LANGUAGE
    StrCmp $LANGUAGE "cancel" 0 +2
        Abort

    StrCmp $LANGUAGE ${LANG_SIMPCHINESE} 0 +2
        Strcpy $lang "china"
        Goto +2
        StrCpy $lang "english"
FunctionEnd

Var len1
Var len2
Var leni
Var len
Var sun
Var len3
Var len4
!macro ExeEnd  exestr
    strlen $sun "${exestr}"
    intop $len3 0 + 0
    intop $len4 0 + 0
    intop $len 0 + 0
    intop $leni 0 + 0
    strcmp $sun 0 +12 0                    ;是否到了字符串的尾端!
    IntOp $leni $leni + 1                  ;截取字符的长度增加!
    StrCpy $len1 "${exestr}" $leni $len3   ;截取字符,并保存与len1中
    StrCpy $len2 "$len1" "" -1             ;取出Len1最后一个字符放入Len2中
    Strcmp $len2 ";" 0 +9                  ;判断Len2中的字符是不是";"如果是,表示这以经是一个进程名了!如果不是,刚跳过下面的宏,继续取!              
    StrCpy $len $len1 -1
    FindProcDLL::FindProc "$len" ;查找进程是否存在!
    StrCmp $R0 1 0 +2
    KillProcDLL::KillProc "$len" ;杀掉进程,此处应注意,不是所有程序的进程都能杀掉,有些进程用这个方法无法结束!
    intop $leni 0 + 0
    strlen $
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值