首先,來說下,本教程實現的功能:
- 在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. 參考鏈接
《Linux下通過.desktop文件創建桌面程序圖標(快捷方式)及文件編寫》
===================================================
===================================================
業餘時間不定期更新一些想法、思考文章,歡迎關注,共同探討,沉澱技術!