1. 程式人生 > >QT 原始碼編譯 configure 引數說明 (一)

QT 原始碼編譯 configure 引數說明 (一)

很久的帖子了,有一些引數不一定適合你的qt版本,具體還是要看所用版本的help,不過引數解釋很有參考價值,轉載學習 

當進入解壓好的原始碼包後,使用./configure –help命令,可以獲得相應幫助,那我們只要選取引數部分看看

-release

這個引數顯而易見,就是編譯Qt以釋出版的模式進行,一般來說,最後系統完成後,庫就應該是釋出版。

-debug

與上面對應,自然是除錯版了

-debug-and-release

釋出和執行版本(apple)

-developer-build

釋出版本也可以除錯。

-opensource

-commercial

這兩個引數是指是編譯是商業版本的,還是開源版本呢,視個人情況而定。

-shared

-static

這兩個引數是指Qt的lib以動態還是靜態編譯生成,這自然也是視個人需要的。

-no-fast

-fast

這兩個就很有關係,如果對自己的電腦效能很有信心,那就選第一個,那所有的工程檔案都會生成到makefiles中,那編譯的時間,估計可以看完變形金剛了。如果選第二個,那就加入子目錄和庫到makefiles,這樣就能加快編譯的速度。

-no-largefile

-largefile

顧名思義,支不支援大檔案,一般來說,嵌入式裡是不會有從超過4G的大檔案的,那就選第一個吧。

-no-exceptions

-exceptions

計算機英語夠好的人都該懂,這個自然就是異常情況,選則編譯器支援丟擲異常,否則不支援。

-no-accessibility

-accessibility

可訪問性的支援,如果是交叉編譯不需要支援windows等的可以選擇不支援

-no-stl

-stl

是都加入stl的支援,stl,

no-sql-<driver>
-qt-sql-<driver>
-plugin-sql-<driver>

這個可要好好說明下,一般來說,對於一個優秀的專案開發,資料庫是必不可少的,qt也自帶了大多數資料庫驅動,可以完美地支援資料庫的使用。對於資料庫的使用,我們可以直接qt驅動編譯進去,或者以外掛的形式編譯進去。一般來說,最簡單地就是直接編譯進去,但使用外掛形式的可以更加靈活,針對不同的需求將驅動外掛新增。其中,<>代表的是驅動名,如果我想直接新增sqlite的支援話,形式如下:-qt-sql-sqlite。其他名稱可以自己檢視引數裡,有詳細地介紹。

-system-sqlite

sqlite真受歡迎啊,當然那麼優秀的嵌入式資料庫,本人也是基本使用它來進行開發。這個引數意思是使用作業系統上的sqlite資料庫,如果是不太會移植的,可以考慮直接使用qt自帶的驅動。

-no-qt3support

-qt3support

這個也是簡潔易懂,加不加對qt3的支援。

no-xmlpatterns

-xmlpatterns

選擇對xml的支援,如果對網路無需求的話,就不用加了。

-no-phonon

-phonon

phonon是qt中處理多媒體的模組,比如放放視訊什麼來著,不過本人從沒用過,也是根據需要選擇的。

-no-phonon-backend
-phonon-backend
與上面類似,只不過這兩是以外掛的形式加入支援。

-no-svg

-svg

是否加入svg的支援,svg即可縮放向量圖形。

-no-webkit

-webkit

是否加入webkit的支援,這可是個好東西,不過如果跟網路不搭界的話,還是不支援吧。

-no-scripttools

-scripttools

是否加入指令碼工具的支援,這對php等指令碼工程師來說是個很棒的引數,但對於我這樣菜鳥,就別提了。

-platform target

目標平臺,這可是關鍵了,如果不注意的話,編譯出來是x86上的話,哪怕是再牛的嵌入式工程師來也沒法幫你移植到開發板上。通常,本人是linux-arm-g++。
-no-mmx

-no-3dnow

-no-sse

-no-sse2

這四個引數是針對CPU的指令集,老實說,我也不甚瞭解,不過,對於開發並不是影響很大。

-qtnamespace

把qt的庫封裝到名稱空間,沒啥重要用處,依個人愛好加吧。

-qtlibinfix

將所有的qt的.so庫重新命名,也沒啥大用處。

-no-sql-<driver>

-qt-sql-<driver>
-plugin-sql-<driver>
-system-sqlite

這是相當明顯的,如果這都看不出來,,囧,那您一定比我近視(本人800度近視。。)

就是說如果是-no-XX-,就說明編譯時不選擇這個引數,如過是-qt-XX-,說明我們可以編譯直接選用qt自帶的驅動,如果是 -plugin-XX-,就是將驅動以外掛形式編譯,而-system-XXX,當然是使用作業系統提供的驅動,不過那就需要您自己移植了,而且有時還要用第三方的API,就方便來說非常麻煩,但是不排除您是牛人要好好玩玩的情況。

接下來,我們接著研究配置引數。

-qt-zlib

-system-zlib

想必經過上面的講解,引數的意思已經很快得知,就是選擇qt帶的zlib庫還是系統的zlib。zlib庫是用於檔案和資料壓縮的庫,對於新入嵌入式的人來說,可能並無太大的用處,但是在以後的實際開發中,特別是對於多媒體影象圖形的工程師來說,就肯定用到,因為圖形影象的壓縮都要使用或涉及到這個庫。

-no-gif
-qt-gif

這是選擇gif的支援,如果選擇qt支援的話,那在用qt開發的專案中,就能顯示gif圖,gif也是比較普遍的圖片格式了,英文全稱是Graphics Interchange Format。

-no-libtiff
-qt-libtiff
-system-libtiff

tiff是一種非常複雜的光柵影象格式,並且有直接現成的C語言實現庫,因此選擇引數時就有了qt和system,一般來說,科學相關的開發裡可能會用到。

-no-libpng
-qt-libpng
-system-libpng

png的相關引數,一種非失真性壓縮點陣圖圖形檔案格式,其實就是為了替代gif搞出來的,也是隨實際需要來選擇,當然,也有C語言實現的庫。

-no-libmng
-qt-libmng
-system-libmng
大汗,大汗,這可是超級罕見的東西,QT竟然也能支援,說實話,這個引數我看來就是無視的。MNG是多幀PNG動畫格式,結構極其複雜,基本沒人用。

-no-libjpeg
-qt-libjpeg
-system-libjpeg

jpeg,這麼有名的圖片格式也不用說了,隨需要選擇吧。

-no-openssl
-openssl
-openssl-linked

SSL,Security Socket Layer,是一個安全傳輸協議,在Internet網上進行資料保護和身份確認,而OpenSSL是一個開放原始碼的實現了SSL及相關加密技術的軟體包,在qt中,我們可以選擇直接支援,或者OpenSSL連結支援,這個引數也是為有需要者提供的。

以上是第三方庫的引數選擇,緊接著就是qt附加引數,在附加引數裡,我們可以指定編譯的部分及加入引數來獲取資訊。

-make
-nomake

一句話,說明,就說我可以這兩個引數選擇哪些我要編譯,哪些我不需要,在 libs tools examples demos docs translations這些裡你可以選擇,比如examples,並不重要,可以放在-nomake後,這樣編譯過程中就不會編譯這部分了。通過適當的選擇,我們可以大大加快編譯的速度,這對配置較差的機子來說有著積極意義。

-R <string>
-l <string>

這兩個引數是為編譯時增加一個庫的執行路徑及標頭檔案的路徑,比如使用tslib作為開發觸控驅動時,我們就應使用這兩個引數來指定tslib的庫路徑和標頭檔案路徑。

-no-rpath

-rpath

這個引數比較難於理解,簡單地說,就是告訴動態載入器,到-rpath指定的目錄中尋找編譯時須要的動態連結庫,語法就與上面的引數結合,比如 -rpath -R/home/xxxx。

-continue

這個引數的作用就是當出現錯誤時依然進行配置編譯,換我是不會加上的。

-verbose, -v

這個引數就很眼熟,在前面的文章中有過詳細介紹,簡言之,就是顯示配置的每一步的具體資訊。

-no-optimized-qmake
-optimized-qmake

是否編譯生成優化過的qmake,沒啥大用,也屬於可有可無的引數。

-no-nis
-nis

是否編譯NIS支援,NIS(網路資訊服務)是一個提供目錄服務的RPC(遠端過程呼叫)應用服務,當然沒網路需要的可以再次華麗地無視。

-no-cups
-cups

是否編譯CUPS支援,是不是想問什麼用啊?~~~~囧,開列印店用的。好了,不說冷笑話,CUPS給Unix/Linux使用者提供了一種可靠有效的方法來管理列印。它支援IPP,並提供了LPD,SMB(服務訊息塊,如配置為微軟WINDOWS的印表機)、JetDirect等介面。CUPS還可以瀏覽網路印表機。它的開發提供者是大名鼎鼎的“水果生產商”----蘋果公司。

-no-iconv
-iconv

選擇是否編譯iconv支援,iconv是一個計算機程式以及一套應用程式程式設計介面的名稱。它的作用是在多種國際編碼格式之間進行文字內碼的轉換。這對跨語言Qt開發人員來說是很有用的,當然,考慮到中文的編碼,我也選擇加入支援。

-no-pch
-pch

是否支援預編譯過的標頭檔案。預編譯頭就是把一個工程中的一部分程式碼,預先編譯好放在一個檔案裡(通常以.pch為副檔名),這個檔案就稱為預編譯標頭檔案。這些預先編譯好的程式碼在工程開發的過程中不會被經常改變。如果這些程式碼被修改,則需要重新編譯生成預編譯標頭檔案。媽媽經常說:不懂就要學。我說:不懂就加上。。。

no-dbus
-dbus
-dbus-linked

是否編譯編譯QtDBus模組。dbus是freedesktop下開源的Linux IPC通訊機制,本身Linux 的IPC通訊機制包括,管道(fifo),共享記憶體,訊號量,訊息佇列,Socket等。在Qt中DBUS是有單獨的模組的,可見其重要性。

 

-reduce-relocations 對於額外的庫連結器優化,可以減少編譯中的再定位。

no-separate-debug-info
-separate-debug-info
是否儲存debug資訊在.debug,一般為了查錯,還是選擇儲存吧。

-xplatform target

相當淺顯的引數,即交叉編譯的目標平臺,一般來說根據你所要移植的目標板來確定。

-no-feature-<feature>
-feature-<feature>

選取qte的feature編譯,對於這個,我理解為特性,特性的描述你可以參考src/corelib/global/qfeatures.txt,在這裡面對於每個特性都有比較充分的講解。對於特性地選擇,也是要根據開發需求進行,如果裁剪適當,能大大為qte庫瘦身。

-embedded <arch>

嵌入式平臺架構選擇,可以選擇arm,mips,x86及generic,視你的目標平臺決定吧。

-armfpa
-no-armfpa

這個引數也只是針對ARM平臺的,是否加入對於基於ARM的浮點數格式的支援,通常,這個引數在編譯時會自動選擇。

-little-endian
-big-endian

目標平臺的大端和小端選擇,這應該是常識了,如果這不知道,就不要來混嵌入式了

-host-little-endian
-host-big-endia

主機平臺的大端和小端選擇,屬於雞肋的引數,不選擇也會在配置時自動選擇。

-no-freetype
-qt-freetype
-system-freetype

選擇freetype,FreeType庫是一個完全免費(開源)的、高質量的且可移植的字型引擎,它提供統一的介面來訪問多種字型格式檔案,在嵌入式開發中,有套可使用的字型對於中文開發至關重要,本人一般使用文泉驛字型。

-qconfig local

使用本地的qconfig配置檔案來替代全部引數配置,有需要的可以去研究下,可以裁剪控制元件級別的引數。

-depths <list>

顯示的畫素位深,也是根據需要來進行吧。

-qt-decoration-<style>
-plugin-decoration-<style>
-no-decoration-<style>

這個是選擇qt的樣式風格,對於需要美化介面的專案來說,可以好好選擇下。

-no-opengl
-opengl <api>

是否加入opengl的支援,OpenGL是個專業的3D程式介面,是一個功能強大,呼叫方便的底層3D圖形庫。不過對於一般的開發來說,似乎有很少用到的地方。

-qt-gfx-<driver>
-plugin-gfx-<driver>
-no-gfx-<driver>

這個是相當重要的一個引數,選擇QtGui的圖形顯示驅動,比如我們在pc上使用qvfb模擬時,就應該加入對qfvb的支援。我們可以在 linuxfb,transformed,qvfb,vnc,multiscreen這幾個中選擇。在平常的開發板上,選擇linuxfb即可。

-qt-kbd-<driver>
-plugin-kbd-<driver>
-no-kbd-<driver>

選擇鍵盤的驅動支援,可以支援usb鍵盤,串列埠鍵盤等等,也是在tty,usb ,sl5000, yopy, vr41xx ,qvfb中選擇。

qt-mouse-<driver>
-plugin-mouse-<driver>
-no-mouse-<driver>

滑鼠的驅動支援,一般都會選擇tslib,可以完美地支援觸控式螢幕,在pc,bus,linuxtp,yopy,vr41xx,tslib,qvfb中選擇吧。

-iwmmxt

加入iWMMXt指令的編譯,也只是部分XScale架構才具有。

-no-glib
-glib

是否加入glib庫的支援,glib庫對應即gtk庫,就也是說加入後可以使用gtk。

原文: http://www.cnitblog.com/zouzheng/archive/2010/07/06/67199.html