使用linuxdeployqt在linux下進行Qt打包發佈(超詳細)

首先,來說下,本教程實現的功能:

  • 在linux下對開發的Qt應用,進行拷貝依賴文件dll等,並打成deb安裝包;
  • 實現可安裝、卸載,安裝完畢自動在開始菜單下和桌面添加快捷方式;
  • 卸載後自動刪除快捷方式,以及刪除應用生成的log文件。

測試環境:ubuntu 16.04

一、使用linuxdeployqt拷貝依賴文件

win系統下有個自動拷貝依賴文件的工具windeployqt,而linux系統下也有個類似的工具,叫linuxdeployqt,原理一個意思。

1. 下載linuxdeployqt

linuxdeployqt-x86_64.AppImage,下載地址:

https://github.com/probonopd/linuxdeployqt/releases

在這裏插入圖片描述

2. 安裝linuxdeployqt

爲了我們後面使用時,方便一點,我們把這長長的名字改短點吧:

mv linuxdeployqt-6-x86_64.AppImage linuxdeployqt

然後修改爲可執行權限

chmod 777 linuxdeployqt

再把這個可執行文件扔進/usr/local/bin目錄,這樣,我們就可以在其他目錄訪問了

mv linuxdeployqt /usr/local/bin

測試是否安裝成功

linuxdeployqt --version

輸出版本信息,表示安裝成功。
在這裏插入圖片描述

3. Qt庫路徑設置到環境變量

工具會根據生成的可執行文件,自動搜索依賴,故我們需要確保Qt庫的相關路徑設置到環境變量中,這樣工具在搜索時才能找到,並拷貝它們。

另外拷貝文件,對環境變量的使用,不想要重啓系統那麼麻煩,所以我們修改.bashrc文件,僅對當前用戶永久有效。

vim ~/.bashrc

在.bashrc文件末尾,追加內容如下:

#add qt env
export PATH=/opt/Qt5.13.0/5.13.0/gcc_64/bin:$PATH
export LIB_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/lib:$LIB_PATH
export PLUGIN_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/plugins:$PLUGIN_PATH
export QML2_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/qml:$QML2_PATH

其中,/opt/Qt5.13.0/5.13.0/gcc_64是本次測試環境Qt安裝目錄,大家根據自己的情況替換。

然後,使用source命令讓文件立即生效。

source ~/.bashrc

4. 拷貝依賴文件

拷貝前,確認生成的是Release版本的程序,這個是常識。

我們在根目錄下建立TestSetup目錄,用於放置打包相關的文件;

並在TestSetup下繼續建個Test目錄,用來裝Test應用及拷貝文件。

mkdir TestSetup
cd TestSetup
mkdir Test

把我們的應用Test拷貝到Test目錄下

在這裏插入圖片描述

使用命令執行依賴文件拷貝

linuxdeployqt Test -appimage

終端報錯,如下:

在這裏插入圖片描述

不用管它,是關於桌面文件的,後面我們直接編輯它。

一會後,/TestSetup/Test目錄下,已經把依賴全部拷貝好了。

在這裏插入圖片描述

若你的應用中有調用其他庫、配置文件等,那麼手動拷貝到此目錄下。

5. 配置共享庫搜索路徑(可選)

如果你的應用中,調用了其他的庫,又想要放在某個指定目錄下,那麼可以在應用同目錄下,添加qt.conf文件,指定庫搜索路徑。這塊知識,就自行百度吧,反正最終目的,能正常啓動應用就行。

6. 測試應用能否正常運行

此時,一個完整的運行環境已經具備了,我們測試一下。

重新開一個終端,在該終端的環境變量中去掉Qt庫相關的路徑,修改後的環境變量只對該終端生效,然後我們執行應用,看能否運行。

操作過程:先用export查看有哪些環境變量設置了Qt路徑。

export

在這裏插入圖片描述

如果本教程之前沒有配置過qt環境變量,那麼結果應該和.bashrc文件我們追加的內容一致的。

然後把這些環境變量中Qt路徑去掉:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export LIB_PATH=
export PLUGIN_PATH=
export QML2_PATH=

測試啓動應用

./Test

此時如果不出意外,應該可以正常啓動。

如果有意外,那就根據實際情況,先把問題解決,再繼續。

二、打成deb包

1. deb包安裝路徑原理簡述

下面舉個例子進行說明,我們先來看打包目錄與安裝後目錄結構對比。

打包目錄,DEBIAN下面爲deb包控制文件,應用與依賴文件位於source/opt/Test/,如下:

source
├── DEBIAN
│   └── control
│   └── postinst
│   └── postrm
├── opt
    └── Test
        ├── Test
        └── xxx

若按照此打包目錄生成deb,安裝後,其目錄如下:

/
├── opt
    └── Test
        ├── Test
        └── xxx

小結:

DEBIAN目錄下主要存放一些控制文件和腳本,具體後面使用到時,再細說。

DEBIAN目錄固定放置於打包目錄頂層。

deb包安裝時,默認將內部文件,釋放至根目錄下(/),故我們需要在打包時,將安裝目錄層次創建好,以達到想要的安裝路徑效果。

2. 規劃安裝路徑

我們希望將Test應用安裝到/opt/Test/下,下面開始創建目錄層次。

在/TestSetup/下創建output目錄,用於存放生成的deb包;

創建source目錄,用於存放打包文件,如下:

在這裏插入圖片描述

在source目錄下,創建DEBIAN目錄、創建安裝路徑層次opt目錄以及opt/Test目錄,如下:

在這裏插入圖片描述

然後將前面我們拷貝的依賴文件,全部移動到/TestSetup/source/opt/Test/目錄下,如下:

在這裏插入圖片描述

3. 配置*.desktop桌面快捷方式文件

還記得前面,拷貝依賴文件時報錯嗎,就是這個桌面文件。

在這裏插入圖片描述

直接把它扔到桌面文件夾(/root/Desktop/),它就可以變成一個帶圖標的快捷方式,類似win。

我們把位於/TestSetup/source/opt/Test/default.desktop改爲Test.desktop;

它有如下內容,需要編輯:

[Desktop Entry]
Type=Application
Name=My Test                    #應用的名字(快捷方式顯示的文字)
Exec=/opt/Test/Test             #應用的執行路徑(絕對路徑)
Icon=/opt/Test/Test.png         #應用的圖標(絕對路徑)
Comment=This is my test         #說明信息
Terminal=true                   #是否允許在終端啓動

我們按照上述內容進行編輯,其中圖標,自己隨便去下載一個.png放到/TestSetup/source/opt/Test/Test.png即可。

注意:

Test.desktop中的路徑需要填寫deb包的安裝路徑,非打包路徑。

4. 創建deb包之control文件

control文件主要描述軟件包的名稱(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和聯繫方式)以及描述(Description)等,是deb包必須具備的描述性文件,以便於軟件的安裝管理和索引。

我們在DEBIAN目錄下創建名爲control的文件,內容如下:

Package: mytest
Version: 0.1.0
Section: utils
Priority: optional
Architecture: amd64
Depends:
Installed-Size: 512
Maintainer: 123@163.com
Description: my test package

含義:

Package:包名。記住,後面卸載時候需要包名。

Version:應用版本。

Architecture:架構,我這裏是amd64。

Maintainer:維護人員聯繫方式,看着辦。

Description:軟件包描述。

其他的,這裏沒用到,就不寫了,自己百度吧。

5. 創建deb包之postinst文件

負責安裝完成時的配置工作,軟件安裝完後,執行該Shell腳本,一般用來配置軟件執行環境,必須以“#!/bin/sh”爲首行。

我們在DEBIAN目錄下創建名爲postinst的文件,內容如下:

#!/bin/sh
cp /opt/Test/Test.desktop /usr/share/applications/
cp /opt/Test/Test.desktop /root/Desktop/

主要將Test.desktop拷貝至2個目錄,Desktop目錄下,自動生成桌面快捷方式。

applications目錄下,生成開始菜單中,other菜單下子項。

最終效果,查看文章末尾處效果圖。

6. 創建deb包之postrm文件

軟件卸載後,執行該Shell腳本,一般作爲清理收尾工作,必須以“#!/bin/sh”爲首行。

我們在DEBIAN目錄下創建名爲postrm的文件,內容如下:

#!/bin/sh
rm /usr/share/applications/Test.desktop
rm /root/Desktop/Test.desktop

主要工作就是刪除postinst創建的2個文件。

7. 使用dpkg命令構建deb包

對source目錄下所有文件打包,在output目錄下生成deb包。

cd /TestSetup/source
dpkg -b . /TestSetup/output/test_amd64_0.1.0.deb

打包結果:

在這裏插入圖片描述

三、deb包的安裝與卸載

1. 安裝

安裝deb包命令如下:

cd /TestSetup/output
sudo dpkg -i test_amd64_0.1.0.deb

安裝完成,桌面效果:

在這裏插入圖片描述

開始菜單效果:

在這裏插入圖片描述

安裝路徑效果:

在這裏插入圖片描述

2. 卸載

卸載時,使用control文件中的包名。

sudo apt-get remove mytest

卸載之後,安裝路徑下文件全部刪除,自動刪除桌面快捷方式和菜單項。

若應用生成一些log文件,因不在打包文件中,故不會自動刪除,

則需要在postrm文件中添加刪除命令。

3. 參考鏈接

《Ubuntu下的deb打包、安裝與卸載》

《Ubuntu中deb包詳解及打包教程》

《Linux下通過.desktop文件創建桌面程序圖標(快捷方式)及文件編寫》


===================================================

===================================================

業餘時間不定期更新一些想法、思考文章,歡迎關注,共同探討,沉澱技術!

            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章