工作中,感覺pro文件的有些內(nèi)容真不太懂,現(xiàn)系統(tǒng)性的學(xué)習(xí)一下。于此備錄,分享共勉。
站在用戶的角度思考問題,與客戶深入溝通,找到安龍網(wǎng)站設(shè)計(jì)與安龍網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋安龍地區(qū)。為了更好的理解,先創(chuàng)建一個(gè)簡(jiǎn)單的工程作為實(shí)踐。
【1】創(chuàng)建一個(gè)pro文件
1.1 新建proDemo工程。步驟如下:Qt Creator--->New Project--->應(yīng)用程序--->Qt Widgets Application--->名稱為:proDemo(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->類信息保持不變--->完成
1.2 提取pro文件。在工程目錄下,把名稱為proDemo且類型為pro的文件找到,內(nèi)容如下所示:
不懂?呵呵~ 我也不懂,先學(xué)習(xí)一下,pro文件分析如下:
【2】模板變量
2.1 模板變量 TEMPLATE
模板變量作用告訴qmake為這個(gè)應(yīng)用程序具體生成哪種makefile。下面是模板變量可供選擇的值:
[1]app 模板變量的默認(rèn)值。建立一個(gè)應(yīng)用程序的makefile。
[2]lib 建立一個(gè)庫的makefile。
[3]vcapp 建立一個(gè)應(yīng)用程序的Visual Studio項(xiàng)目文件。
[4]vclib 建立一個(gè)庫的VisualStudio項(xiàng)目文件。
[5]subdirs 這是一個(gè)特殊的模板,它可以創(chuàng)建一個(gè)能夠進(jìn)入特定目錄且為一個(gè)項(xiàng)目文件生成makefile,還能為它再調(diào)用make的makefile。
由以上分析可知,模板變量值不同,生成的makefile文件也會(huì)隨之改變。那么,默認(rèn)的同時(shí)是最常用的app值,模板請(qǐng)參見下文。
2.2 app模板
app模板告訴qmake為建立一個(gè)應(yīng)用程序生成一個(gè)makefile。
當(dāng)使用這個(gè)模板時(shí),設(shè)置下面這些qmake系統(tǒng)變量值是有效的??梢栽谀愕?pro文件中使用它們?yōu)槟愕膽?yīng)用程序指定特定信息。
HEADERS - 應(yīng)用程序中的所有頭文件的列表。
SOURCES - 應(yīng)用程序中的所有源文件的列表。
FORMS - 應(yīng)用程序中的所有.ui文件(由Qt設(shè)計(jì)器生成)的列表。
LEXSOURCES - 應(yīng)用程序中的所有l(wèi)ex源文件的列表。
YACCSOURCES - 應(yīng)用程序中的所有yacc源文件的列表。
TARGET - 可執(zhí)行應(yīng)用程序的名稱。默認(rèn)值為項(xiàng)目文件的名稱。(如果需要擴(kuò)展名,會(huì)被自動(dòng)加上。)
DESTDIR - 放置可執(zhí)行程序目標(biāo)的目錄。
DEFINES - 應(yīng)用程序所需的額外的預(yù)處理程序定義的列表。
INCLUDEPATH - 應(yīng)用程序所需的額外的包含路徑的列表。
DEPENDPATH - 應(yīng)用程序所依賴的搜索路徑。
VPATH - 尋找補(bǔ)充文件的搜索路徑。
DEF_FILE - 只有Windows需要:應(yīng)用程序所要連接的.def文件。
RC_FILE - 只有Windows需要:應(yīng)用程序的資源文件。
RES_FILE - 只有Windows需要:應(yīng)用程序所要連接的資源文件。
你只需要使用那些你已經(jīng)有值的系統(tǒng)變量。例如,如果你不需要任何額外的INCLUDEPATH,那么你就不需要指定它,qmake會(huì)為所需的系統(tǒng)變量提供默認(rèn)值。
例如,上例中的項(xiàng)目pro文件也可寫成這樣:
注意:如果條目是單值的,比如template或者目的目錄DESTDIR(可執(zhí)行文件或二進(jìn)制文件的發(fā)布目錄),我們是用“=”,但如果是多值條目,我們使用“+=”來為這個(gè)變量添加現(xiàn)有的條目值。
使用“=”會(huì)用新值替換原有的值。例如,如果我們寫了DEFINES = QT_DLL,其它DEFINES所有的條目值都將被刪除并用QT_DLL替代。
2.3 lib模板
lib模板告訴qmake為建立一個(gè)庫而生成一個(gè)makefile。當(dāng)使用這個(gè)模板時(shí),除了app模板中提到的系統(tǒng)變量外,還有一個(gè)VERSION是被支持的。
你需要在為庫指定特定信息的.pro文件中使用它們。VERSION - 目標(biāo)庫的版本號(hào)。比如,2.3.1。
2.4 subdirs模板
subdirs模板告訴qmake生成一個(gè)makefile,它可以進(jìn)入到特定子目錄并為這個(gè)目錄中的項(xiàng)目文件生成makefile并且為它調(diào)用make。
在這個(gè)模板中只有一個(gè)系統(tǒng)變量SUBDIRS可以被識(shí)別。這個(gè)變量中包含了所要處理的含有項(xiàng)目文件的子目錄的列表。這個(gè)項(xiàng)目文件的名稱是和子目錄同名的,這樣qmake就可以發(fā)現(xiàn)它。
例如,如果子目里是“myapp”,那么在這個(gè)目錄中的項(xiàng)目文件應(yīng)該被叫做myapp.pro。
【3】配置變量CONFIG
配置變量CONFIG 指定了編譯器所要使用的選項(xiàng)和所需要被連接的庫。配置變量中可以添加任何東西,但只有下面這些選項(xiàng)可以被qmake識(shí)別。
3.1 控制編譯器
下面這些選項(xiàng)控制著使用哪些編譯器標(biāo)志:
release - 應(yīng)用程序?qū)⒁詒elease模式連編。如果“debug”被指定,它將被忽略。
debug - 應(yīng)用程序?qū)⒁詃ebug模式連編(與release互斥)。
debug_and_release - 工程同時(shí)用調(diào)試和發(fā)布模式編譯。
build_all - 如果指定是debug_and_release模式,工程默認(rèn)是同時(shí)用調(diào)試和發(fā)布模式編譯。
ordered - 使用subdirs模板時(shí),本選項(xiàng)指定了子目錄應(yīng)該按照給出的順序編譯。
warn_on - 編譯器會(huì)輸出盡可能多的警告信息。如果“warn_off”被指定,它將被忽略。
warn_off - 編譯器會(huì)輸出盡可能少的警告信息(與warn_on互斥)。
3.2 連編類型
下面這些選項(xiàng)定義了所要連編的庫/應(yīng)用程序的類型:
qt - 應(yīng)用程序是一個(gè)Qt應(yīng)用程序,并且Qt庫將會(huì)被鏈接。
thread - 應(yīng)用程序是一個(gè)多線程應(yīng)用程序。
x11 - 應(yīng)用程序是一個(gè)X11應(yīng)用程序或庫。
windows - 只用于“app”模板:應(yīng)用程序是一個(gè)Windows下的窗口應(yīng)用程序。
console - 只用于“app”模板:應(yīng)用程序是一個(gè)Windows下的控制臺(tái)應(yīng)用程序。
dll - 只用于“l(fā)ib”模板:庫是一個(gè)共享庫(dll)。
staticlib - 只用于“l(fā)ib”模板:庫是一個(gè)靜態(tài)庫。
plugin - 只用于“l(fā)ib”模板:庫是一個(gè)插件,這將會(huì)使dll選項(xiàng)生效。
例如,如果你的應(yīng)用程序使用Qt庫,并且你想把它連編為一個(gè)可調(diào)試的多線程的應(yīng)用程序,你的項(xiàng)目文件應(yīng)該會(huì)有下面這行:
注意,你必須使用“+=”,不要使用“=”,否則qmake就不能正確使用連編Qt的設(shè)置了,比如沒法獲得所編譯的Qt庫的類型了。
3.3 聲明QT庫模塊
如果CONFIG變量值中包含了qt這個(gè)值,qmake支持了qt的程序(因?yàn)閝make也可以用在非qt程序的編譯)這就要調(diào)整一些你程序中使用的qt的模塊,而QT變量,正是達(dá)到這個(gè)目的的。QT是用來聲明使用到的一些額外的模塊,例如:通過下面的方法使得xml和網(wǎng)絡(luò)模塊有效:
注意:默認(rèn)情況下,qt包含了core 和 gui 模塊,所以上面的聲明僅僅是添加xml和網(wǎng)絡(luò)模塊到默認(rèn)的列表中。
比如,下面的語句就是忽略了默認(rèn)模塊,當(dāng)編譯程序源碼時(shí)候會(huì)導(dǎo)致錯(cuò)誤:
假如你想編譯一個(gè)不需要gui模塊的工程,你需要用“-=”操作符來去除包含。
例如:下面的語句就是小型的Qt工程會(huì)被編譯
下面的羅列顯示了QT變量可以使用的選項(xiàng),并解釋了相應(yīng)的特點(diǎn):
core (included by default) QtCore module 核心模塊
gui (included by default) QtGui module 界面模塊
network QtNetwork module 支持網(wǎng)絡(luò)模塊
opengl QtOpenGL module 支持opengl圖像編程
sql QtSql module 支持sql數(shù)據(jù)庫驅(qū)動(dòng)
svg QtSvg module 支持svg矢量圖形
xml QtXml module 支持xml模塊
qt3support Qt3Support module 支持qt3類
注意:添加opengl到QT變量里面,等價(jià)于往CONFIG變量里面添加。
所以對(duì)于Qt應(yīng)用程序來說,沒必要同時(shí)往QT變量和CONFIG變量里面添加opengl選項(xiàng)。
3.4 關(guān)于 CONFIG(debug, debug|release)語法
CONFIG變量可以同時(shí)定義 debug 和 release,但只有一個(gè)處于active(當(dāng)兩個(gè)互斥的值都出現(xiàn)時(shí),最后設(shè)置的處于active狀態(tài))
什么意思?怎么理解呢?請(qǐng)看如下:
如上寫法,release處于active狀態(tài)。胡說吧!你咋知道呢?嗯哼?不信咱們用上面的工程測(cè)試一下。
[1] 還原測(cè)試現(xiàn)場(chǎng)。把工程文件夾proDemo同級(jí)的目錄及文件刪除干凈(為了驗(yàn)證準(zhǔn)確性,先還原測(cè)試實(shí)驗(yàn)現(xiàn)場(chǎng),以下類似做法意義相同)。
[2] 修改內(nèi)容。把工程中的pro類型文件改為下面的內(nèi)容:
[3] 編譯構(gòu)建。首先把工程qmake一下,然后構(gòu)建。
好,完成測(cè)試操作。激動(dòng)人心的時(shí)刻到了!這個(gè)時(shí)候,我們會(huì)發(fā)現(xiàn)proDemo同級(jí)目錄生成了appFile文件夾。
打開此文件夾,發(fā)現(xiàn)有兩個(gè)文件:proDemo.exe 和 proDemo.exe.embed.manifest
壞了!從pro文件來看,我們debug和release版本生成的目標(biāo)文件名稱是相同的(即TARGET值)。腫么辦呢?為了驗(yàn)證是release版本的可執(zhí)行程序!
這樣吧!我們?cè)谏霞?jí)目錄即proStudy文件夾中搜索*pdb文件(調(diào)試debug版本必生成的文件),沒有搜索到。OK!那就說明是Release版本。
其實(shí),另外一種辦法,我們會(huì)發(fā)現(xiàn)proDemo工程文件夾同級(jí)目錄下也會(huì)生成一個(gè)build-proDemo-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Debug名稱的文件夾(說明一點(diǎn):剛剛構(gòu)建程序時(shí)QT Creator的模式是Debug),而這個(gè)文件夾中會(huì)有debug和release兩個(gè)文件夾,你會(huì)發(fā)現(xiàn)debug文件是空的,而release文件夾中才有內(nèi)容。這點(diǎn)也可以說明剛剛的確生成的是release版本。
但是,上面的寫法,debug 和 release都可以通過測(cè)試,而且閱讀比較費(fèi)勁,反正總感覺迷惑性太強(qiáng),如何處理呢?建議寫法如下:
這種情況下,我們?cè)賮矸治鲆幌拢?/p>
[1] 還原現(xiàn)場(chǎng)。清空proDemo工程目錄下除過proDemo而外的其他文件夾(同上)。
[2] 切換模式。分別切換Debug和Release版本:
[3] 編譯構(gòu)建。各自執(zhí)行qmake,并進(jìn)行構(gòu)建,再運(yùn)行,可以看到同樣的窗體:
好勒~ 盡管,看起來是同樣的窗體,但是,要理解是兩個(gè)完全不同版本的應(yīng)用程序。
現(xiàn)在看看proDemo目錄下會(huì)多出這樣兩個(gè)文件夾:demo_Debug 和 demo_Release,在其各自目錄下,可以分別發(fā)現(xiàn)可執(zhí)行程序proDemo_Debug和proDemo_Release,即剛剛兩個(gè)窗體應(yīng)用程序。
同時(shí),會(huì)發(fā)現(xiàn)再?zèng)]有生成appFile文件夾,這點(diǎn)也可以驗(yàn)證DESTDIR 后面的“=”與 “+=”的作用區(qū)別。
那么,再回頭看 CONFIG(debug, debug|release)這種語法是什么含義呢?
注解:兩個(gè)參數(shù),前者是要判斷active的選項(xiàng),后者是互斥的選項(xiàng)的一個(gè)集合。
有人覺得難道這么麻煩?上面的例子中,生成兩種版本的應(yīng)用程序,我們通過對(duì)Qt Creator構(gòu)建模式進(jìn)行了切換,那么想直接生成呢?
可以直接加選項(xiàng)build_all。比如,可以把pro文件改為這樣的內(nèi)容:
然后清空工程文件夾同級(jí)其它目錄,再qmake一下,編譯后,可以看到不用切換Qt Creator情況下,也我們一次性同時(shí)生成了兩種版本的可執(zhí)行程序。
【3】Qt Creator創(chuàng)建工程的pro文件
下面分別把Qt Creator新建的不同類型工程默認(rèn)的pro文件羅列一下,可以參考學(xué)習(xí):
3.1 新建proDemo1工程(注意:模板選擇,項(xiàng)目:應(yīng)用程序;Qt Widgets Application)。步驟如下:Qt Creator--->New Project--->應(yīng)用程序--->Qt Widgets Application--->名稱為:proDemo1(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->類信息保持不變--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件其實(shí)與本文第一張圖片相同。因?yàn)樗üこ滔嗤?,默認(rèn)pro文件也相同。
3.2 新建proDemo2工程(注意:模板選擇,項(xiàng)目:應(yīng)用程序;Qt Quick Application)。步驟如下:Qt Creator--->New Project--->應(yīng)用程序--->Qt Quick Application--->名稱為:proDemo2(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->Qt Quick component set : Qt Quick Controls1.2--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件利用include引入了pri類型的文件。
3.3 新建proDemo3工程(注意:模板選擇,項(xiàng)目:應(yīng)用程序;Qt 控制臺(tái)應(yīng)用)。步驟如下:Qt Creator--->New Project--->應(yīng)用程序--->Qt 控制臺(tái)應(yīng)用--->名稱為:proDemo3(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->類信息保持不變--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件去掉了CONFIG配置變量默認(rèn)的app_bundle項(xiàng),由于是控制臺(tái)應(yīng)用程序。
3.4 新建proDemo4工程(注意:模板選擇,項(xiàng)目:庫;C++庫)。步驟如下:Qt Creator--->New Project--->庫--->C++ 庫--->名稱為:proDemo4(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->類型:共享庫--->其他項(xiàng)均默認(rèn)--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件添加了unix環(huán)境的控制。
3.5 新建proDemo5工程(注意:模板選擇,項(xiàng)目:庫;C++庫)。步驟如下:Qt Creator--->New Project--->庫--->C++ 庫--->名稱為:proDemo5(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->類型:靜態(tài)鏈接庫--->其他項(xiàng)均默認(rèn)--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件與3.4工程的大區(qū)別是為配置變量CONFIG添加了staticlib值,因?yàn)楣こ填愋瓦x擇為靜態(tài)鏈接庫。
3.6 新建proDemo6工程(注意:模板選擇,項(xiàng)目:庫;C++庫)。步驟如下:Qt Creator--->New Project--->庫--->C++ 庫--->名稱為:proDemo6(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->類型:Qt Plugin--->其他項(xiàng)均默認(rèn)--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件添加其他文件OTHER_FILES配置變量,另外,配置變量CONFIG添加了plugin值,因?yàn)楣こ填愋瓦x擇為Qt Plugin。
3.7 新建proDemo7工程(注意:模板選擇,項(xiàng)目:其他項(xiàng)目;Qt單元測(cè)試)。步驟如下:Qt Creator--->New Project--->其他項(xiàng)目--->Qt單元測(cè)試--->名稱為:proDemo7(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->其他項(xiàng)均默認(rèn)--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件為QT變量添加testlib值。
3.8 新建proDemo8工程(注意:模板選擇,項(xiàng)目:其他項(xiàng)目;Qt4設(shè)計(jì)師自定義控件)。步驟如下:Qt Creator--->New Project--->其他項(xiàng)目--->Qt4設(shè)計(jì)師自定義控件--->名稱為:proDemo8(創(chuàng)建路徑自己擬定,本地為F:\Source\proStudy)--->控件類:customControl--->其他項(xiàng)全部默認(rèn)--->完成。對(duì)應(yīng)的pro文件如下:
此pro文件中當(dāng)Qt版本大于4.0時(shí)為QT變量添加值designer。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:QT5.7pro設(shè)置詳解-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://aaarwkj.com/article34/dpjose.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、全網(wǎng)營銷推廣、App開發(fā)、網(wǎng)站內(nèi)鏈、Google、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容