成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)城步,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
----------------------------------------------------------------
網(wǎng)頁版課程源碼 提取碼:1uy7
引言
----------------------------------------------------------------
在前面的章節(jié)中我們介紹了pro文件的常用配置。當(dāng)我們進(jìn)行項(xiàng)目研發(fā)時(shí),在各個(gè)子項(xiàng)目的pro中經(jīng)常會(huì)出現(xiàn)重復(fù)配置,為了處理這種問題,Qt提供了另外一個(gè)項(xiàng)目配置文件:pri文件。在pri文件里,我們可以編寫公共的變量給各個(gè)子項(xiàng)目用,還可以配置各種編譯選項(xiàng)、配置各種路徑。在本節(jié)中,我們將討論一下pri文件都有哪些作用。
?
正文
----------------------------------------------------------------
在本節(jié)中,我們將以常用關(guān)鍵字為線索,介紹pri文件所能起到的各種功能。我們準(zhǔn)備為大家介紹如下關(guān)鍵字:
表02-05-01
關(guān)鍵字 | 含義 |
include | 在pro中引入其他的pri文件 |
環(huán)境變量 | 在pri中使用環(huán)境變量 |
變量 | 在pri中定義與使用變量 |
函數(shù) | pri中提供的常用函數(shù) |
unix/win32 | 配置不同平臺(tái)下的編譯配置項(xiàng) |
DEFINES | 在pri中定義宏 |
CONFIG | 項(xiàng)目的配置參數(shù) |
QMAKE_CXXFLAGS | 配置編譯警告 |
現(xiàn)在,我們來分別進(jìn)行介紹:
1,? include ---在pro中引入其他的pri文件
??? pri文件編寫完成之后,可以在項(xiàng)目文件(pro文件)或者其他pri文件中引用。
語法:include? (pri文件全路徑名)??
比如:
1.??? | include? ($(TRAINDEVHOME)/src/gui_base.pri) |
?
注:
1.?? ? 請(qǐng)注意include后面有空格。 2.?? ?pri文件路徑中的目錄分隔符要用"/",請(qǐng)不要使用"\"。 3.?? ?pri文件只能被另一個(gè)pri文件或pro文件引用,不能在.h或.cpp文件中用#include語句進(jìn)行引用。 |
?
2,?環(huán)境變量 --- 在pri中使用環(huán)境變量
???有時(shí)候,在項(xiàng)目編譯時(shí)我們會(huì)用到一些環(huán)境變量。比如,將項(xiàng)目編譯為32位還是64位,編譯成debug版還是release版等等。那么,在pri文件中我們?cè)鯓邮褂眠@些環(huán)境變量呢?
???語法: $$(環(huán)境變量名稱)
???比如:
1.?? ? ? 2.?? ? ? | include? ($$(TRAINDEVHOME)/src/gui_base.pri) OBJECTS_DIR ? = $$(TRAINDEVHOME)/obj/chapter02/ks02_04 |
???在上述例子中,我們用到了TRAINDEVHOME這個(gè)環(huán)境變量值,分別用來描述gui_base.pri的文件路徑以及ks02_04項(xiàng)目的OBJECT_DIR配置項(xiàng)的值。
?
3?變量與環(huán)境變量 --- 在pri中定義與使用變量、環(huán)境變量
???除了環(huán)境變量之外,有時(shí)候?yàn)榱朔奖氵€可以自己定義一些變量。
???比如,Qt的isEmpty()函數(shù)不識(shí)別環(huán)境變量,因此我們可以這樣做:
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? | DEVHOME ? = $$(TRAINDEVHOME) isEmpty(DEVHOME) ? { ??? error('TRAINDEVHOME'環(huán)境變量必須被定義.) } |
???在上述代碼中,因?yàn)閕sEmpty()函數(shù)不識(shí)別環(huán)境變量但是可以識(shí)別我們定義的變量,所以我們定義了DEVHOME變量,這樣isEmpty()就可以根據(jù)TRAINDEVHOME這個(gè)環(huán)境變量的取值進(jìn)行判斷,如果未定義TRAINDEVHOME環(huán)境變量,那么就會(huì)報(bào)錯(cuò)。
???使用語法同系統(tǒng)環(huán)境變量不同,變量名不用括號(hào)。
語法:$$變量名
1.?? ? ? 2.?? ? ? | TEMPDIR ?= $$(TRAINDEVHOME)/obj/chapter02/ks02_04 OBJECTS_DIR ? = $$TEMPDIR |
請(qǐng)注意:
1)?在一行語句中,所引用的變量或環(huán)境變量的個(gè)數(shù)不能超過1個(gè),
錯(cuò)誤的寫法:
1.?? ? ? 2.?? ? ? | CHAPTER?? = chapter02 TEMPDIR = $$(TRAINDEVHOME)/obj/$$CHAPTER/ks02_04 |
正確的寫法:
1.?? ? | TEMPDIR = $$(TRAINDEVHOME)/obj/chapter02/ks02_04 |
?
2) 使用環(huán)境變量的語法跟使用變量的語法不同(環(huán)境變量名要用括號(hào)):
???環(huán)境變量: $$(環(huán)境變量名)
變量:???? $$變量名
?
4, 函數(shù) ?--- pri中提供的常用函數(shù)
???在上面的示例中,我們介紹了isEmpty()函數(shù)、error()函數(shù),實(shí)際上Qt還提供了一些其他函數(shù):
??? 1) ?isEmtpy()?
用來判斷一個(gè)變量是否為空值,比如:
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? | DEVHOME ? = $$(TRAINDEVHOME) isEmpty(DEVHOME) { ??? error('TRAINDEVHOME'環(huán)境變量必須被定義.) } |
?
2)? equals(a, b)
???判斷某個(gè)變量的 值是否與指定值相等,比如:
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? 5.?? ? ? | BUILDTYPE ? = $$(TRAINBUILDTYPE) equals(BUILDTYPE, debug){ ??? CONFIG += debug ??? CONFIG -= release } |
???
??? 3)? error()
???用來輸出錯(cuò)誤信息,并終止當(dāng)前命令,比如:
1.?? ? ? 2.?? ? ? 3.?? ? ? | isEmpty(DEVHOME) ? { ??????? error('TRAINDEVHOME'環(huán)境變量必須被定義.) } |
???
??? 4)? contains(x, y)
???用來判斷一個(gè)變量x是否包含字符串y,比如下面的配置表示如果TRAIN_QMAKESPEC變量包含” hpux.* ”,則執(zhí)行括號(hào)中的配置:
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? 5.?? ? ? | contains(TRAIN_QMAKESPEC, hpux.* ? ) { ??? # HPUX下全面支持C++ ??? QMAKE_CXXFLAGS *= -Aa ??? LIBS += -lrt } |
?
5, unix/win32? --- 配置不同平臺(tái)下的編譯配置項(xiàng)
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? 5.?? ? ? 6.?? ? ? 7.?? ? ? 8.?? ? ? 9.?? ? ? | unix{ ??? contains( TRAIN_QMAKESPEC, g++ ) { ??????? CONFIG *= precompile_header ??? } } #WIN32下聲明使用預(yù)編譯頭文件 win32{ ??? CONFIG *= precompile_header } |
?
注:
1.?? ?linux也使用unix配置。 2.?? ?所有的左括號(hào)“{”,跟起始配置在同一行,不要換行。 |
?
6, DEFINES --- 在pri中定義宏
???可以根據(jù)需要定義宏定義,這些宏定義可以在源代碼中使用,比如
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? 5.?? ? ? 6.?? ? ? 7.?? ? ? 8.?? ? ? 9.?? ? ? 10.? ? 11.? ? 12.? ? 13.? ? | #UNIX下編譯設(shè)置 unix{ ??? #表示unix或linux操作系統(tǒng) ??? DEFINES *= unix? __unix } #WIN32下編譯設(shè)置 win32{ ??? #表示W(wǎng)INDOWS操作系統(tǒng) ??? DEFINES *= WIN32 } equals(BUILDBIT,64){ ??? DEFINES *= TRAIN_64 } |
???在上述代碼中,在pri中定義的宏定義" unix"、" __unix "、"WIN32"、"TRAIN_64"都可以在代碼中使用,比如:
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? 5.?? ? ? 6.?? ? ? 7.?? ? ? | #ifdef ? ?__unix ??? …… #endif ? #ifdef? TRAIN_64 ??? …… #endif |
?
注:
1.??DEFINES后面是 *=,(就是 星號(hào)=),用來表示累加。 |
?
7, CONFIG --- 項(xiàng)目的配置參數(shù)
??? CONFIG配置項(xiàng)在pri中與pro中用法一樣。
???常用的參數(shù):
??? CONFIG? += console qt debug release thread warn_on
1)? console
表示本應(yīng)用是命令行程序,可以啟動(dòng)一個(gè)終端(命令行)。
2)? qt
表示本應(yīng)用要加載Qt的庫,鏈接時(shí)要鏈接qt類庫。
3)? debug/release
表示程序是debug版本還是release版本。
4)? thread
表示程序是否啟用多線程,如果沒有thread選項(xiàng),那么程序無法使用多線程。
5)? warn_on
表示是否顯示編譯警告。個(gè)人建議開啟,因?yàn)橛行┚幾g警告還是很重要的。如果不關(guān)注就可能導(dǎo)致程序運(yùn)行時(shí)異常。
?
8, QMAKE_CXXFLAGS? --- 配置編譯警告
???用來為編譯器指明一些處理標(biāo)志,比如:
? 1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? | #去掉strcpy等編譯警告 QMAKE_CXXFLAGS ? *= -wd499 ? # ui生成的文件使用 utf-8 編碼,編譯時(shí)產(chǎn)生4819 警告,因此去掉 QMAKE_CXXFLAGS ? *= -wd4819 |
?
結(jié)語
----------------------------------------------------------------
在進(jìn)行項(xiàng)目開發(fā)時(shí)經(jīng)常用到pri文件。當(dāng)然,如果您僅僅在編寫一個(gè)獨(dú)立的exe模塊,pri文件可能不會(huì)發(fā)揮太大作用,因?yàn)榭梢园裵ri中的配置項(xiàng)直接編寫到pro文件中。但是小編還是建議大家養(yǎng)成習(xí)慣,編碼時(shí)要做到標(biāo)準(zhǔn)化。比如建立一套pri文件,這樣在建立新項(xiàng)目時(shí)將會(huì)非常方便,這些內(nèi)容我們將在下一節(jié)介紹?,F(xiàn)在,我們先來回顧一下本節(jié)的注意事項(xiàng):
??? 1, pri文件路徑中的目錄分隔符要用"/",請(qǐng)不要使用"\"。
??? 2, pri文件只能被pro文件或另一個(gè)pri文件引用。
3,使用環(huán)境變量的語法跟使用變量的語法不同:
? ?環(huán)境變量: $$(環(huán)境變量名)
變量:???? $$變量名
??? 4,在pro或pri中,Qt提供了一些函數(shù)來方便判斷或者輸出信息,比如 isEmpty()、error()等。
??? 5,在使用CONFIG的配置項(xiàng)進(jìn)行判斷時(shí),所有的左括號(hào)“{”,跟起始配置在同一行,不要換行。
???6, 在pri中定義的宏可以在代碼中使用
???好了,總結(jié)就到這里,祝大家編程愉快。
----------------------------------------------------------------
《Qt入門與提高-GUI產(chǎn)品開發(fā)》目錄請(qǐng)?zhí)砑渔溄用枋?br />上一節(jié):KS02-04 pro文件常用配置
下一節(jié):KS02-06 一勞永逸:引入pri體系
本文標(biāo)題:KS02-05pri文件有啥用?
轉(zhuǎn)載源于:http://muchs.cn/article18/iioedp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、做網(wǎng)站、網(wǎng)站建設(shè)、軟件開發(fā)、微信公眾號(hào)、服務(wù)器托管
聲明:本網(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)容