自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解 Qt 選擇性編譯和庫(kù)裁減

移動(dòng)開發(fā)
本文介紹的是 Qt 選擇性編譯和庫(kù)裁減,幫你節(jié)約時(shí)間的一篇文章,先來看內(nèi)容。

Qt 選擇性編譯庫(kù)裁減是本文將要介紹的內(nèi)容,編譯一次Qt要耗費(fèi)太多的時(shí)間,常常是越著急用它,編起來越慢。其實(shí)通過很簡(jiǎn)單的幾招可以幫你節(jié)省編譯的時(shí)間。下面就一一道來:

編譯之前確定哪些功能是不必要的,對(duì)編譯樹進(jìn)行簡(jiǎn)單裁剪

比如最常見的,像demos, examples,雖然很有參考價(jià)值,但完全可以放在后面用到的時(shí)候再單獨(dú)編譯小工程,這樣可以節(jié)省不少時(shí)間。經(jīng)過實(shí)踐,最簡(jiǎn)單的方法是修改configure文件,在該文件中有個(gè)指定編譯目錄的字段:

  1. QT_DEFAULT_BUILD_PARTS=”libs tools examples demos docs translations” 

可以把examples、demos和docs從這里去掉,但要注意,別的可不能隨便去掉。

如果在后面的使用中發(fā)現(xiàn)有些小工程需要編譯了,可以采用一般編譯Qt程序的方法,即用Qt安裝目錄bin下的qmake來生成Makefile,同樣可以編譯和測(cè)試?yán)哟a,一點(diǎn)也不影響使用。

裁剪Qt模塊

Qt從4版本開始采用了模塊化的形式,將獨(dú)立的功能封裝在獨(dú)立的庫(kù)里,所以可以很簡(jiǎn)單的去掉一些不需要的庫(kù),這樣也能節(jié)省編譯時(shí)間和對(duì)硬盤空間的占用。 Qt的configure配置提供了一些設(shè)置模塊的方法,如它支持-no-svg和-no-webkit,通過configure的時(shí)候加這些選項(xiàng)就可以去掉這部分支持。相應(yīng)的還有很多小的功能可以通過configure參數(shù)的形式配置,具體的參考configure –help的輸出。在查看configure幫助的時(shí)候特別要注意加*號(hào)的內(nèi)容,也就是Qt默認(rèn)的configure選項(xiàng),有的時(shí)候默認(rèn)選項(xiàng)可不一定是討人喜歡的哦。

Qt桌面版本默認(rèn)會(huì)盡量多的編譯feature進(jìn)去,這樣有一定的好處,就是用戶可以用到所有的Qt功能,但壞處也很明顯,那就是編譯出來的Qt超級(jí)大,特別是編譯debug版本,基本上要占1到2G的空間,所以個(gè)人感覺研究一下configure的選項(xiàng)還是很有必要的。另外, 默認(rèn)狀況下有些插件是不會(huì)編譯的,比如數(shù)據(jù)庫(kù)插件,往往需要用戶自己根據(jù)需要編譯,這一點(diǎn)也要注意。

針對(duì)嵌入式版本的配置

Qt的嵌入式版本本身就支持feature裁剪,我們可以充分利用這一特性讓Qt庫(kù)盡量變小。具體的做法是要做一個(gè)自己的qconfig-[myconfig].h特性文件,該文件中定義你要去掉Qt中的哪些feature。在configure的時(shí)候加“-qconfig myconfig” 選項(xiàng), Qt就會(huì)根據(jù)你給出的配置文件來編譯,以達(dá)到裁剪的目的。這里要強(qiáng)調(diào)一下,這種裁剪方式只適用于嵌入式版本。這里的myconfig可以用任何你喜歡的名字來代替。
在qt的代碼中已經(jīng)給出了一些qconfig頭文件的例子,默認(rèn)編譯采用full config也就是

不裁剪任何feature。所有Qt預(yù)定義好的qconfig文件,可以在src/corelib/global/下找到,包括qconfig-minimal.h, qconfig-small.h, qconfig.medium.h,qconfig-large.h和qconfig-dist.h,也就是從裁剪量由多到少都有據(jù)可依。如果要添加你自己的配置文件,要在src/corelib/global下建立一個(gè)形如qconfig-xxx.h的文件,這個(gè)xxx也就是你要在configure的時(shí)候傳入的qconfig參數(shù)。筆者測(cè)試使用的Qt版本是4.4.1,這個(gè)版本的build system有個(gè)小毛病,就是如果你指定的qconfig參數(shù)實(shí)際上沒有qconfig-xxx.h文件對(duì)應(yīng), build不會(huì)停止,它只會(huì)給出一個(gè)不起眼的提示,編譯過程會(huì)繼續(xù), 這一點(diǎn)挺讓人費(fèi)解的。而且這種情況下Qt編譯使用的配置基本上和fullconfig相同,鑒于它的讓人迷惑的舉動(dòng),個(gè)人覺得有必要提醒大家一下,使用自定義qconfig的時(shí)候一定要確定配置文件放對(duì)了位置,而且qconfig參數(shù)給的正確。

一般我們的建議是在桌面上測(cè)試階段編譯一個(gè)full的版本,再根據(jù)你的項(xiàng)目使用Qt feature的情況總結(jié)哪些可去掉的feature。 feature之間有千絲萬縷的依賴關(guān)系,這個(gè)問題也是困擾很多人的難點(diǎn)所在。具體的依賴可以查閱src/corelib/global/qfeatures.h和src/corelib/global/qfeatures.txt(描述依賴關(guān)系的文檔)。另外,Qt里還提供了一個(gè)可視化的配置依賴的工具,叫做qconfig,在QTDIR/tools/qconfig目錄。該工具需要基于Qt桌面版本編譯。如在我的linux系統(tǒng)下可以用下面的命令來編譯:

  1. $ cd qt-embedded-linux-commercial-4.4.1/tools/qconfig  
  2. $ /usr/local/Trolltech/Qt-4.4.3/bin/qmake  
  3. $ make 

編譯成功后運(yùn)行./qconfig,初始要打開qfeatures.txt. Qconfig讀取該文件生成一個(gè)樹狀圖,該圖很清楚的顯示出feature之間的依賴關(guān)系。如下圖所示,如果你去掉了LINEEDIT這個(gè)feature,用到該控件的combobox也就不能繼續(xù)使用了。有了這個(gè)工具裁剪Qt變得簡(jiǎn)潔直觀,方便了很多。

選定了你要去掉的feature后點(diǎn)擊菜單File->Save As..會(huì)彈出保存文件的頁面,文件名字應(yīng)該定義成qconfig-xxx.h的形式,這樣你在configure的時(shí)候就可以傳入相應(yīng)的qconfig參數(shù)了。你還可以通過選擇File->Open打開現(xiàn)有的qconfig-xxx.h文件,通過修改已經(jīng)有的文件更快的編輯配置。

根據(jù)筆者測(cè)試,未經(jīng)裁剪的qte4.4.1編譯出來為:

  1. libQtCore.so是2.6M  
  2. libQtGui.so是9.5M 

如果用small來編譯,就能縮小為:

  1. libQtCore.so是2.0M  
  2. libQtGui.so是5.7M 

差異還是比較明顯的。

小結(jié):Qt 選擇性編譯庫(kù)裁減的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。更多內(nèi)容請(qǐng)參考編輯推薦。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-04-06 10:20:26

MySQL數(shù)據(jù)庫(kù)索引

2022-08-19 09:53:20

人工智能大數(shù)據(jù)風(fēng)險(xiǎn)

2009-11-09 17:32:59

Oracle可選擇性

2009-09-16 15:05:38

開源軟件軟件營(yíng)銷開源產(chǎn)品

2011-08-29 09:33:24

WindowsQt庫(kù)靜態(tài)

2011-07-05 14:16:50

QT Mysql 驅(qū)動(dòng)

2011-07-05 10:44:51

Qt Sqlite 靜態(tài)編譯

2011-06-23 10:16:55

VS2010 QT 4.7.2 QT

2014-08-06 10:10:52

MariaDB二進(jìn)制日志

2023-07-31 12:05:38

GIL全局解釋器鎖

2010-07-13 14:06:26

Perl選擇性控制結(jié)構(gòu)

2009-10-13 08:50:45

Windows 7關(guān)閉預(yù)覽

2011-06-29 17:00:26

QT 靜態(tài)編譯 Debug

2011-06-21 17:23:40

QT 編譯

2011-06-23 09:54:00

VS2010 Qt 4.7.2 Qt

2011-05-16 14:53:14

谷歌蘋果

2011-07-01 12:52:50

Ubuntu Qt wxWidgets

2011-07-04 15:13:31

QT MPlayer 移植

2011-04-02 09:17:38

2010-02-06 16:21:21

Ubuntu內(nèi)核
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)