QT工程pro文件編寫詳細說明

Qt程序通常使用Qt提供的qmake工具來編譯。linux

qmake工具能夠使用與平臺無關的.pro文件生成與平臺相關的makefile。該工具包含了調用Qt內置代碼生成工具(mocuicrcc)的必要邏輯規則。程序員

 

能夠在命令行下,輸入qmake -project來生成平臺無關的pro文件。安全

工程文件pro主要分爲三種:app(單獨的應用程序),lib(靜態和動態庫),subdirs(遞歸編譯)。工程類型能夠使用TEMPLATE變量來指定。app

如: TEMPLATE = app(默認不指定的狀況下是app工程)函數

 

對於app工程或者lib工程,有如下這些常常使用的變量:工具

HEADERS:指定C++頭文件post

SOURCES:指定C++實現文件ui

FORMS:指定須要uic處理的ui文件編碼

RESOURCES:指定須要rcc處理的qrc文件插件

DEFINES:指定預約義預處理器符號

INCLUDEPATH:指定C++編譯器搜索頭文件路徑

LIBS:指定工程要連接的庫

CONFIG:指定工程配置和編譯參數

QT:指定工程所要使用的Qt模塊

VERSION:指定目標庫版本號

TARGET:指定可執行文件或庫的基本文件名,默認爲當前目錄名

DESTDIR:指定可執行文件放置的目錄

DLLDESTDIR:指定目標庫文件放置的目錄

 

 

CONFIG:指定工程配置和編譯參數

如下對CONFIG變量作主要介紹:

debug:編譯有調試信息的可執行文件或則庫

release:編譯不具備調試信息可執行文件或者庫(若是同時指定debug release時,只有debug有效)

warn_off:關閉大量警告,默認是打開的

qt:指應用程序使用Qt

dll:動態編譯庫

staticlib:靜態編譯庫

plugin:編譯一個插件

console:應用程序須要寫控制檯

當咱們寫CONFIG變量時,能夠使用

如:CONFIG = qt release warn_off

或者CONFIG = qt

      CONFIG += release

      CONFIG += warn_off

當想要移除某個設置時:CONFIG -= warn_off

 

 

在pro文件裏,能夠使

varName或者varName或者

{varName}來訪問本身定義的變量,如

 

MyVersion = 1.2

FILE = 1.cpp

TARGET = improve$${MyVersion}

SOURCES = $$FILE

 

pro文件裏,訪問環境變量的用法是:$(varName)

pro文件裏,訪問Qt配置參數的用法:$$[varName]

 

在不一樣的編譯平臺上編譯時,須要設定條件。如:

win32{

 SOURCES += 1.cpp

}else{

 SOURCES += 2.cpp

}

或者

win32:SOURCES += 3.cpp

 

 

 

在QT中,有一個工具qmake能夠生成一個makefile文件,它是由.pro文件生成而來的,.pro文件的寫法以下:


1. 註釋
從「#」開始,到這一行結束。

2.模板變量告訴qmake爲這個應用程序生成哪一種makefile。下面是可供使用的選擇:
TEMPLATE = app
A> app -創建一個應用程序的makefile。這是默認值,因此若是模板沒有被指定,這個將被使用。
B> lib - 創建一個庫的makefile。
C> vcapp - 創建一個應用程序的VisualStudio項目文件。
D> vclib - 創建一個庫的VisualStudio項目文件。
E> subdirs -這是一個特殊的模板,它能夠建立一個可以進入特定目錄而且爲一個項目文件生成makefile而且爲它調用make的makefile。


#指定生成的應用程序放置的目錄
DESTDIR += ../bin

#指定生成的應用程序名
TARGET = pksystem

#配置信息
CONFIG用來告訴qmake關於應用程序的配置信息。

    CONFIG+= qt warn_on release

在這裏使用「+=」,是由於咱們添加咱們的配置選項到任何一個已經存在中。這樣作比使用「=」那樣替換已經指定的全部選項是更安全的。
A> qt部分告訴qmake這個應用程序是使用Qt來連編的。這也就是說qmake在鏈接和爲編譯添加所需的包含路徑的時候會考慮到Qt庫的。
B> warn_on部分告訴qmake要把編譯器設置爲輸出警告信息的。
C> release部分告訴qmake應用程序必須被連編爲一個發佈的應用程序。在開發過程當中,程序員也能夠使用debug來替換release


#指定uic命令將.ui文件轉化成ui_*.h文件的存放的目錄
UI_DIR += forms

#指定rcc命令將.qrc文件轉換成qrc_*.h文件的存放目錄
RCC_DIR += ../tmp

#指定moc命令將含Q_OBJECT的頭文件轉換成標準.h文件的存放目錄
MOC_DIR += ../tmp

#指定目標文件(obj)的存放目錄
OBJECTS_DIR += ../tmp

#程序編譯時依賴的相關路徑
DEPENDPATH += . forms include qrc sources

#頭文件包含路徑
INCLUDEPATH += .

#qmake時產生的信息,【

a讀取變量a的字符串】,【

(PATH)讀取環境變量PATH】
#message($$(PATH))

 

#源文件編碼方式
CODECFORSRC = GBK

#工程中包含的頭文件
HEADERS += include/painter.h
#工程中包含的.ui設計文件
FORMS += forms/painter.ui
#工程中包含的源文件
SOURCES += sources/main.cpp sources/painter.cpp
#工程中包含的資源文件
RESOURCES += qrc/painter.qrc

 

LIBS += -L folderPath  //引入的lib文件的路徑  -L:引入路徑

Release:LIBS += -L folderPath // release 版引入的lib文件路徑

Debug:LIBS += -L folderPath // Debug 版引入的lib 文件路徑

DEFINES += XX_XX_XXX  //定義編譯選項,在.h文件中就能夠使用 :#ifdefine xx_xx_xxx

RC_FILE = xxx.icns

7. 平臺相關性處理
咱們在這裏須要作的是根據qmake所運行的平臺來使用相應的做用域來進行處理。爲Windows平臺添加的依賴平臺的文件的簡單的做用域看起來就像這樣:

win32 {
SOURCES += hello_win.cpp
}
====================================================================================================================
當你已經建立好你的項目文件,生成Makefile就很容易了,你所要作的就是先到你所生成的項目文件那裏而後輸入:

Makefile能夠像這樣由「.pro」文件生成:

    qmake -oMakefile hello.pro

對於VisualStudio的用戶,qmake也能夠生成「.dsp」文件,例如:

    qmake -tvcapp -o hello.dsp hello.pro

===============================================================

 

在用Qt進行嵌入式linux開發時,有時爲了調試便利,桌面版linux環境也會配置一份,這樣在編譯時就會調用不一樣版本的庫。qmake提供不少功能強大的內置函數和變量,爲動態編譯項目提供了便利。

 方式一:使用contains()

  1. DEFINES += RUN_ON_EMBEDDEDSYSTEM  
  2.   
  3. if(contains(DEFINES,RUN_ON_EMBEDDEDSYSTEM)){#contains和{必須在同一行,不然報錯  
  4.   
  5. INCLUDEPATH +=  /root/802/trunk/dsp/c6accel_1_01_00_07/soc/packages \  
  6.                 /root/802/trunk/dsp/codec-engine_2_26_02_11/packages \  
  7.                 /root/802/trunk/dsp/framework-components_2_26_00_01/packages \  
  8.                 /root/802/trunk/dsp/dsplink_1_65_01_05_eng/packages \  
  9.                 /root/802/trunk/dsp/dsplink_1_65_01_05_eng \  
  10.                 /root/802/trunk/dsp/xdais_6_26_01_03/packages \  
  11.                 /root/802/trunk/dsp/linuxutils_2_26_02_05/packages \  
  12.                 /root/802/trunk/dsp/local-power-manager_1_24_03_10_eng/packages \  
  13.                 /root/802/trunk/dsp/codecs-omap3530_4_02_00_00/packages \  
  14.                 /root/802/trunk/tools/xdctools_3_16_03_36/packages \  
  15.                 /root/802/trunk/dsp/c6accel_1_01_00_07/soc/c6accelw \  
  16.                 /root/802/trunk/dsp/dmai_2_20_00_15/packages \  
  17.                 /root/802/trunk/app/ortp-0.24.2/include \  
  18.                 /root/802/trunk/app/ffmpeg-2.8.2  
  19.   
  20. LIBS += /usr/lib/libjthread.so \  
  21.         /usr/lib/libjrtp.so \  
  22. }else{  
  23. LIBS+= /usr/local/lib/libjthread.so \  
  24.        /usr/local/lib/libjrtp.so \  
  25.        /usr/local/lib/libavdevice.so\  
  26.        /usr/local/lib/libavcodec.so\  
  27.        /usr/local/lib/libavfilter.so\  
  28.        /usr/local/lib/libavformat.so\  
  29.        /usr/local/lib/libavutil.so\  
  30.        /usr/local/lib/libpostproc.so\  
  31.        /usr/local/lib/libswresample.so\  
  32.        /usr/local/lib/libswscale.so\  
  33. }  

方法二:使用CONFIG 

        CONFIG 變量用於指定工程配置和編譯器選項,一般取debug,release,dll等值,也能夠自定義選項值, CONFIG變量的每一個選項均可以用於條件判斷。

  1. CONFIG += qt5    
  2.     
  3. qt5{    
  4. LIBS += -lmydll_qt5    
  5. }else{    
  6. LIBS += -lmydll    
  7. }  
相關文章
相關標籤/搜索