您好,登錄后才能下訂單哦!
----------------------------------------------------------------
網頁版課程源碼 提取碼:1uy7
引言
----------------------------------------------------------------
在前面章節我們通過一個exe的例子介紹了pro文件的基本配置,本節來看一下pro文件的一些常用配置。
?
正文
----------------------------------------------------------------
1.?? exe還是dll---TEMPLATE
我們開發的程序要么是exe程序、要么是dll程序,這由啥來決定呢?首先來介紹一下TEMPLATE配置項。該配置項用來確定我們生成的程序是exe還是dll。
TEMPLATE???? = app # 表示本項目生成一個exe
TEMPLATE???? = lib? # 表示本項目生成一個dll。
TEMPLATE???? = subdirs? # 表示本項目將掃描指定的子目錄集合并執行相關操作。
?????????????????????? # 經常與SUBDIRS參數配合使用。
?????????????????????? # 比如指定需要翻譯的子目錄列表時,可以用該配置。
?
2.?? 用什么開發語言呢---LANGUAGE
語法:LANGUAGE =C++
表示本項目用C++語言開發。
注意: C要大寫。
?
3.?? 生成的模塊名稱---TARGET
語法:TARGET = xxx
表示本項目生成的程序的名字為xxx。
比如,根據TEMPLATE參數,如果WINDOWS上生成的是prog.exe或者prog.dll,或者在LINUX上生成的是prog(exe文件名)或者libprog.so.1.0.0(dll文件名),都可以用:
TARGET= prog
?
4.?? debug還是release---CONFIG
語法:CONFIG? +=? xxx? xxx? xxx
表示增加某些CONFIG配置項,中間用空格區分。
語法:CONFIG? -=? xxx? xxx? xxx
表示刪除某些CONFIG配置項。
常見參數介紹:
release
以release版本構建。如果也指定debug,最后一個生效。可以用+/-進行控制,如CONFIG -= release, CONFIG+=release
debug
項目以debug模式構建。可以用+/-進行控制。
debug_and_release
項目以debug和release兩種模式構建。即編譯時同時生成debug何release版本的目標程序。
precompile_header
可以在項目中使用預編譯頭文件。
rtti
啟用RTTI支持。默認使用編譯器默認值(具體跟編譯器有關)。關閉用rtti_off。
stl
啟用STL支持。默認使用編譯器默認值(具體跟編譯器有關)。關閉用stl_off。
thread
啟用線程支持。當CONFIG包括qt時啟用。thread是缺省設置。
warn_on
編譯器應該輸出盡可能多的警告。如果也指定了warn_off,最后一個生效。
warn_off
編譯器應該輸出盡可能少的警告。
qt
表示需要鏈接qt的庫。一般使用Qt類庫時需要該配置項,開發服務模塊時,如果只是用Qt的pro文件來組織項目并編譯,一般會使用其他類庫或者自行編寫類庫,所以編寫服務模塊時一般不用qt(寫成:CONFIG -= qt)。
c++11
啟用c++11支持。如果編譯器不支持c++11這個選項,沒有影響。默認不支持c++11。
c++14
啟用c++14支持。如果編譯器不支持c++14這個選項,沒有影響。默認不支持c++14。
?
5.?? 使用qt的哪些模塊---QT
語法:QT +=? xxx? xxx xxx
表示增加某些QT配置項,各個配置項之間用空格隔開。
語法:QT -=? xxx? xxx xxx
表示刪除某些QT配置項。
指定項目中使用Qt的模塊。默認情況下,QT包含core和gui這兩個模塊,以確保標準的GUI應用程序無需進一步的配置就可以構建。
如果想建立一個不包含Qt GUI模塊的項目,可以使用“ -=”操作符。
下面一行將構建一個不帶gui的Qt項目:
1.?? ? | QT? -=? ? gui? # 僅僅使用core模塊 |
如果要創建一個界面(widget),而且要用到XML及網絡相關的類,那么需要包含如下模塊:
1.?? ? | QT += ? widgets xml network |
請注意,如果您需要用到ui文件,請務必配置QT+= widgets,否則編譯時將無法通過uic處理ui文件(無法生成ui文件對應的.h頭文件),將導致編譯失敗。
?
6.?? 各種DIR | 各種PATH
DEPENDPATH
指定查看解決依賴關系的目錄列表,當包含文件時使用:
1.?? ? | DEPENDPATH ? += .? forms include? qrc? ? sources |
其中"."表示當前目錄。
INCLUDEPATH
指定編譯項目時應該被搜索的include目錄,比如:
1.?? ? | INCLUDEPATH ? = $$(TRAINDEVHOME)/include |
這里使用了環境變量TRAINDEVHOME,引用環境變量時要寫成$$(TRAINDEVHOME)的樣子。關于環境變量的使用將在下節詳細介紹。
這里需要注意的是,如果項目中包含資源 (.ui) 文件,那么應該將$$UI_DIR添加到INCLUDEPATH中,這需要提前定義UI_DIR的值:
1.?? ? ? 2.?? ? ? 3.?? ? ? | UI_DIR = $(TRAINDEVHOME)/obj/demo/dialog/ui INCLUDEPATH ? += $$(TRAINDEVHOME)/include \ ?????????????? ? $$UI_DIR |
?
DESTDIR:
指定目標文件的存放位置,也就是項目生成的exe或dll的存放目錄。 比如下述語句指明了一個dll項目的目標程序的存放位置:
1.?? ? | DESTDIR ? = ../../lib |
?
MOC_DIR:
指定來自moc的所有中間文件放置的目錄(含Q_OBJECT宏的頭文件轉換成標準.h頭文件的存放目錄)。比如:
1.?? ? | MOC_DIR ? = $$(TRAINDEVHOME)/obj/moc |
???
OBJECTS_DIR:
指定所有中間文件.o(.obj)的存放目錄,比如:
1.?? ? | OBJECTS_DIR ? = $$(TRAINDEVHOME)/obj/chapter02/ks02_04 |
?
RCC_DIR:
指定Qt資源編譯器輸出文件的目錄(.qrc文件轉換成qrc_*.h頭文件的存放目錄),比如:
1.?? ? | RCC_DIR ? =$$(TRAINDEVHOME)/obj/chapter02/ks02_04/resources |
?
UI_DIR:
指定qt的uic命令轉換ui文件得到的所有中間文件放置的目錄(.ui文件轉化成ui_*.h頭文件的存放目錄),比如:
1.?? ? | UI_DIR ? =$$(TRAINDEVHOME)/obj/chapter02/ks02_04/ui |
?
7.?? FORMS
指定項目使用的ui文件。這些ui文件在編譯前將被qt的uic命令處理。所有的構建這些ui文件所需的依賴、頭文件和源文件都會自動被添加到項目中。
1.?? ? ? 2.?? ? ? | FORMS ? = mydlg.ui \ ??????? login.ui |
?
8.?? HEADERS
指定項目用到的頭文件,比如:
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? | HEADERS ? = abc.pro \ ????????? myfile.h \ ????????? ../../comdll/mycom.h \ ????????? $$(TRAINDEVHOME)/include/base.h |
注:
1.?? ? 將pro文件添加到HEADERS是為了方便,這樣就可以在VisualStudio工具中直接找到pro文件,而無需到資源管理器查找。 2.?? ? 可以用相對路徑的語法,比如:../../comdll/mycom.h 3.?? ? 可以使用環境變量,比如: $$(TRAINDEVHOME)/include/base.h 4.?? ? 使用”\”進行換行。"\"前加一個空格。 |
?
9.?? SOURCES
項目用到的cpp文件,語法、注意點同HEADERS。
?
10.? RESOURCES
項目用到的資源文件 (qrc) 的名稱,比如:
1.?? ? | RESOURCES ? += mdi.qrc |
?
11.? LIBS
指定鏈接到項目中的庫列表。使用-l(小寫的L)和-L兩種語法。
-l(小寫的L)
表示庫文件名,比如,下面的語句表示鏈接到庫文件mycomm。
1.?? ? | LIBS? += -lmycomm |
?
-L
表示庫文件所在的路徑,比如,下面的語句表示庫文件所在目錄為:
/usr/local/myprogram/lib,鏈接的庫文件為mycomm、fesp。
1.?? ? ? 2.?? ? ? 3.?? ? ? | LIBS? += -L/usr/local/myprogram/lib \ ??????????????????????? -lmcomm \ ??????????????????????? -lfesp |
???????
12.? TRANSLATIONS
指定包含用戶界面翻譯文本的翻譯(.ts)文件列表,比如:
?????? ? #xxxfortranslations.pro
1.?? ? | TRANSLATIONS =translations/graphplatform_zh_CN.ts |
???? 該配置將被lupdate命令讀取(如下,手工執行該命令),生成的ts文件就保存在TRANSLATIONS所指向的文件名。
lupdate ? xxxfortranslations.pro? |
?
13.? SUBDIRS
? 同template=subdirs配合使用。
? 該配置指出本項目包含的子目錄,可以用來掃描生成翻譯文件,或者級聯生成整個項目的Makefile。
1.?? ? ? 2.?? ? ? 3.?? ? ? 4.?? ? ? 5.?? ? ? 6.?? ? ? 7.?? ? ? | template=subdirs ? SUBDIRS??? = \ ??????????? esfc?? \ ??????????? common \ ??????????? phcore \ ??????????? phwidget |
如果pro包含上述內容,那么對該pro執行qmake時,qt會自動進入SUBDIRS所包含的各個子目錄,分別執行qmake。
?
注:
1.?? 修改pro或pri文件后,務必重新執行qmake或qmake –tp vc,以便更新Makefile或者VisualStudio的項目文件(.vcxproj) |
?
結語
----------------------------------------------------------------
本節,我們給大家介紹了pro文件常用的一些配置,內容稍微有點多。讀者需要通過多加練習慢慢掌握。練習時,讀者可以嘗試修改配置項的值通過觀察效果來加深理解。
----------------------------------------------------------------
《Qt入門與提高-GUI產品開發》目錄
上一節:K02-03加點料-增加一張圖片
下一節:KS02-05 pri 文件有啥用?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。