Qt的目錄依賴問題----怎樣生成一個綠色的Qt軟體包
Qt的目錄依賴問題----怎樣生成一個綠色的Qt軟體包
一、核心問題:
如果將編譯好的Qt檔案拷貝到任何目錄下,作為一個綠色軟體庫來使用?
二、原理討論
由於Qt在編譯的時候將安裝路徑硬編碼到了庫檔案中,這個問題似乎不太好解決。使用如下命令,可以檢視到底有哪些路徑:
qmake -query
可得到類似的如下結果:
QT_INSTALL_PREFIX:/usr/lib/qt4
QT_INSTALL_DATA:/usr/lib/qt4
QT_INSTALL_DOCS:/usr/share/doc/qt4
QT_INSTALL_HEADERS:/usr/include
QT_INSTALL_LIBS:/usr/lib
QT_INSTALL_BINS:/usr/lib/qt4/bin
QT_INSTALL_PLUGINS:/usr/lib/qt4/plugins
QT_INSTALL_IMPORTS:/usr/lib/qt4/imports
QT_INSTALL_TRANSLATIONS:/usr/share/qt4/translations
QT_INSTALL_CONFIGURATION:/etc
QT_INSTALL_EXAMPLES:/usr/lib/qt4/examples
QT_INSTALL_DEMOS:/usr/lib/qt4/demos
QMAKE_MKSPECS:/usr/lib/qt4/mkspecs
QMAKE_VERSION:2.01a
QT_VERSION:4.7.4
幸運的是,在Qt4中引入了一個新的機制: qt.conf,於是,這個問題得以解決。這些路徑都可以被覆蓋。在assistant中檢視qt.conf的幫助,可以瞭解qt.conf的大致寫法。
[Paths]
Prefix = /some/path
Translations = i18n
如果你將上述qt.conf置於qmake所在的目錄下會發生什麼? qmake -query會告訴你答案
QT_INSTALL_PREFIX:/some/path
QT_INSTALL_DATA:/some/path
QT_INSTALL_DOCS:/some/path/doc
QT_INSTALL_HEADERS:/some/path/include
QT_INSTALL_LIBS:/some/path/lib
QT_INSTALL_BINS:/some/path/bin
QT_INSTALL_PLUGINS:/some/path/plugins
QT_INSTALL_IMPORTS:/some/path/imports
QT_INSTALL_TRANSLATIONS:/some/path/i18n
QT_INSTALL_CONFIGURATION:/some/path
QT_INSTALL_EXAMPLES:/some/path
QT_INSTALL_DEMOS:/some/path
QMAKE_MKSPECS:/some/path/mkspecs
QMAKE_VERSION:2.01a
QT_VERSION:4.8.2
於是,我們可以得到如下結論: 假如有一個qt.conf檔案位於Qt可執行檔案所有的目錄下面,比如/usr/bin目錄中,則這些可執行檔案的搜尋路徑將被qt.conf中指定的路徑所覆蓋。 Prefix是關鍵,它指定了Qt的根目錄,其它很多路徑根據這個路徑來指定 有一些路徑會有一個預設值,比如lib,bin, 還有一些則沒有,比如examples, demos
三、解決方案
鑑於此,下面給出一個可供參考的qt.conf模板
[Paths]
Prefix = /media/Disk/qt-everywhere-opensource-src-4.8.2
Translations = translations
Plugins = plugins
Imports = imports
Examples = examples
Demos = demos
剩下的問題是,每換一個地方,就要手動改一次,重複勞動實在有些不爽。下面提供兩個分別針對Windows和Linux的指令碼,編譯完Qt之後,刪掉最大的src目錄,然後將此指令碼置於根目錄下即可。
Windows版本: updateQt.bat
::
:: this file should be placed in Qt root directory
:: eg. if qmake.exe is in C:\Qt\bin,
:: this script should be in C:\Qt
::
:: Reference:http://www.cuteqt.com/blog/?p=149
:: Reference:http://blog.csdn.net/jq0123/article/details/4325256
REM get current directory
REM and replace \ with /
SET PWD=%~dp0
SET CONF=%PWD%\bin\qt.conf
SET PWD=%PWD:\=/%
echo [Paths] >%CONF%
echo Prefix = %PWD% >>%CONF%
echo Translations = translations >>%CONF%
echo Examples = examples >>%CONF%
echo Demos = demos >>%CONF%
Linux版本: updateQt.sh
#!/bin/bash
function ScriptAbsolutePath() {
DIR=$(dirname `which $0`)
echo $DIR
}
Prefix=`ScriptAbsolutePath`
Translations=translations
Plugins=plugins
Imports=imports
Examples=examples
Demos=demos
CONF=$Prefix/bin/qt.conf
echo [Paths] >$CONF
echo Prefix = $Prefix >>$CONF
echo Translations = $Translations >>$CONF
echo Plugins = $Plugins >>$CONF
echo Imports = $Imports >>$CONF
echo Examples = $Examples >>$CONF
echo Demos = $Demos >>$CONF
四、總結
假如你編譯了一個Qt庫,那麼你可以實施如下步驟:
- 刪除src目錄,裡面都是一些原始碼和臨時檔案。你還可以刪除其它一些無關的目錄,但都不大,無傷大雅。
- 在根目錄下編寫指令碼updateQt.bat或updateQt.sh,內容如下。
- 每次將整個目錄拷到其它地方時,執行一下指令碼。
- 將Qt的bin目錄加到系統路徑中去。這樣,別的軟體就能找到qmake,然後,它就能自動找到庫檔案(lib)和標頭檔案(include)的位置。
然後,你就得到了一個近似於綠色的Qt發行版。每換一次地方只需要執行一下指令碼哦。
注意:只針對Qt4,Qt3沒這個機制。
相關文章
- 聊聊QT新增MySQL驅動依賴的問題QTMySql
- 記錄遇到的一個迴圈依賴問題
- QT5.12 匯出exe依賴的dllQT
- 軟體複用導致的軟體依賴問題 - research!rsc
- 四、yum獲取安裝的軟體包及依賴包
- 解決Maven中90%的依賴(導包)問題Maven
- "綠色"並不代表安全,一個隱藏在綠色軟體中的木馬分析
- 請教一個關於 STF 依賴的 node 與 Appium 依賴的 node 版本衝突問題APP
- Qt獲取一張圖片的平均色(主色調)QT
- 開發composer 包所遇到的問題之,依賴的包報警告資訊
- 依賴——軟體工程師的痛軟體工程工程師
- Qt使用綠色pdf閱讀器開啟檔案QT
- CMake編譯Qt工程時的問題編譯QT
- dpkg: 處理軟體包 nginx (--configure)時出錯: 依賴關係問題 - 仍未被配置Nginx
- qt鐳射加工軟體開發(一)QT
- linux 最後一個沒有依賴問題的搜狗輸入法Linux
- Flutter 04: 圖解第一個程式遇到的安裝依賴問題Flutter圖解
- 基於軟體工程的Qt播放器探索(一) 概述軟體工程QT播放器
- 只有一個依賴包的Dockerized容器的簡單的Http REST APIDockerZedHTTPRESTAPI
- autohotkey qt程式中無法使用的問題QT
- 遷移Qt專案的路徑問題QT
- 直播軟體原始碼,pom 依賴遇到 build 下的依賴報錯原始碼UI
- nuget使用經驗:複雜依賴關係下的包版本問題
- 如何解決 Android Studio 上遠端依賴包重複的問題Android
- 面試題:Spring 的迴圈依賴問題面試題Spring
- 01揹包、有依賴的揹包
- 每個軟體測試員最怕被問的問題:“測得怎麼樣了?”
- 軟體包管理-rpm命令管理-包命名與依賴性
- 三探迴圈依賴 → 記一次線上偶現的迴圈依賴問題
- word怎麼自動生成目錄?Word自動生成目錄的方法教程
- SSM專案出現的依賴問題SSM
- c++類迴圈依賴的問題C++
- 怎樣生成一個好的詞向量
- winscp 綠色版,4步掌握winscp 綠色版軟體的使用教程
- 【Qt開發】01-第一個Qt程式Hello World!QT
- 如何打造一個大模型生成的資料目錄?大模型
- Ubuntu處理依賴問題Ubuntu
- springBoot依賴下載問題Spring Boot
- QT生成固定長度的隨機字串QT隨機字串