1. 程式人生 > >QT---之.pro檔案結構

QT---之.pro檔案結構

Qt_Pro詳解

在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。

3、#指定生成的應用程式放置的目錄

DESTDIR+= ../bin

4、#指定生成的應用程式名,也可以順帶指定生成的應用程式路徑,比如 TARGET=../bin/sendMsgToAuxSys

TARGET= pksystem   

     值得注意的是:當我們build後, pksystem會在Debug及Release檔案下生成,所以  ../

作為一個指令標識,表示Debug的父級目錄,並自動補全預設目錄。而../../表示父級的父級目錄。

5、#配置資訊 CONFIG用來告訴qmake關於應用程式的配置資訊。

CONFIG+= qt warn_on release

在這裡使用“+=”,是因為我們新增我們的配置選項到任何一個已經存在中。這樣做比使用“=”那樣替換已經指定的所有選項是更安全的。

A> qt部分告訴qmake這個應用程式是使用Qt來連編的。這也就是說qmake在連線和為編譯新增所需的包含路徑的時候會考慮到Qt庫的。

B> warn_on部分告訴qmake要把編譯器設定為輸出警告資訊的。

C> release部分告訴qmake應用程式必須被連編為一個釋出的應用程式。在開發過程中,程式設計師也可以使用debug來替換release

6、#指定uic命令將.ui檔案轉化成ui_*.h檔案的存放的目錄

UI_DIR+= forms

7、#指定rcc命令將.qrc檔案轉換成qrc_*.h檔案的存放目錄

RCC_DIR+= ../tmp

8、#指定moc命令將含Q_OBJECT的標頭檔案轉換成標準.h檔案的存放目錄

MOC_DIR+= ../tmp

9、#指定目標檔案(obj)的存放目錄

OBJECTS_DIR+= ../tmp

10、#程式編譯時依賴的相關路徑

DEPENDPATH+= . forms include qrc sources

11、#標頭檔案包含路徑

INCLUDEPATH+= .

#qmake時產生的資訊,【$${a}讀取變數a的字串】,【$$(PATH)讀取環境變數PATH】 #message($$(PATH))

12、#原始檔編碼方式

CODECFORSRC= GBK

13、#工程中包含的標頭檔案

HEADERS+= include/painter.h

14、#工程中包含的.ui設計檔案

FORMS+= forms/painter.ui

15、#工程中包含的原始檔

SOURCES+= sources/main.cpp sources/painter.cpp

16、#工程中包含的資原始檔

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

17# 平臺相關性處理 我們在這裡需要做的是根據qmake所執行的平臺來使用相應的作用域來進行處理。

為Windows平臺新增的依賴平臺的檔案的簡單的作用域看起來就像這樣:

win32 { SOURCES += hello_win.cpp }

當你已經建立好你的專案檔案,生成Makefile就很容易了,你所要做的就是先到你所生成的專案檔案那裡然後輸入:

Makefile可以像這樣由“.pro”檔案生成:

qmake -oMakefile hello.pro

對於VisualStudio的使用者,qmake也可以生成“.dsp”檔案,例如:

qmake -tvcapp -o hello.dsp hello.pro

 

 

 

qmake 常用命令:
   qmake -project //生成pro檔案,自動檢查c/c++程式檔案
        qmake -t lib     //生產把原始碼編譯成庫的pro工程檔案
   qmake -tp vc //根據pro檔案生成vc的工程檔案,qt commericial有一個繫結到vs的工具,可以在選單欄直接開啟
   qmake -r xxx.pro "CONFIG+=debug" //遞迴生成makefile
   moc //包含Q_OBJECT檔案轉換器
   rcc //Qt resource compiler
   uic //Qt ui file translator,to .h file.
  Qt 常用巨集:
   平臺相關
   Q_WS_WIN //window系統
   Q_WS_X11 //xwindow系統
   Q_WS_MAC //蘋果mac系統
   Q_WS_SOL //sun的solaris系統
   其它
   QT_OPENGL_SUPPORT //是否支援opengl
   QT_VERSION    //qt的版本,如 if QT_VERSION > 0x040601(qt > 4.6.1)
   QT_VERSION_STR //qt版本的字串
   QT_POINTER_SIZE //指標的位元組寬度 32bit=4,64bit=8
   QT_REQUIRE_VERSION //用在程式碼中,比如QT_REQUIRE_VERSION(argc, argv, "4.0.2");
   global常用函式
   T qAbs(const T & value) //返回絕對值
   void qCritical(const char * msg, ...) //
   void qDebug(const char * msg, ... ) //
   void qFatal(const char * msg, ... ) //輸出錯誤資訊
   qMax(const T & value1,const T & value2 )//
   qMin(const T & value1,const T & value2 ) //
  
  pro 檔案格式
  #: 表示到行尾均為注視,被忽略
  include: 可以包含別的文字檔案,一般為*pri 例如 #include "../global.pri"
  scope{;;}: 預定義 ,如win32{} 表示在win32平臺下的定義,其它忽略
  win32/unix/linux-g++/linux-g++-64: 平臺巨集
  DESTDIR: 產生目標檔案路徑
  MOC_DIR: moc轉換檔案路徑
  RCC_DIR: 資原始檔路徑
  UI_DIR:ui檔案轉換的路徑
  LIBEXT: 產生lib的字尾
  QMAKE_CFLAGS_DEBUG:
  QMAKE_CXXFLAGS_DEBUG:
  QMAKE_CFLAGS_RELEASE:
  QMAKE_CXXFLAGS_RELEASE:
  TEMPLATE: 決定生成makefile採用的模板,
   =lib 表示庫檔案
   =app 表示生成可執行檔案
   =subdirs 表示處理子目錄(在下面用SUBDIRS += **來指定那些子目錄)
  TARGET: 指定要生成的目標檔名
  Qt+=: 新增額外的模組支援,例如Qt -= QtCore;Qt += network,phonon,xml,thread
  DEFINES: 新增額外的巨集定義,如win下需要的export等
  DEPENDPATH: 新增以來的路徑
  INCLUDEPATH: 新增標頭檔案包含路徑
  HEADERS: 需要包含的標頭檔案
  SOURCES: 需要包含的原始檔
  FORMS: 需要包含的ui檔案
  RESOURCES:需要包含的資原始檔
  LIBS:依賴庫的路徑和名稱 -L{xxdirxx} -l{xxnamexx}
  CONFIG: 新增配置,如warn_on debug_and_release plugin
  TRANSLATIONS: 多國語言支援檔案
  INSTALLS: 要安裝的檔案
  target.path: 安裝的路徑
  #在pro檔案支援environment variables和自定義變數
  #如sources.file +=

SOURCESSOURCES

HEADERS
  #sources.path =

DESTIN_DIR 
  #INSTALLS += target source 
  defineReplace(xxx): xxx為變數 ,此函式可以返回一個變數值如:DESTIN_DIR   #INSTALLS += target source   defineReplace(xxx): xxx為變數 ,此函式可以返回一個變數值如:

xxx()
exists(file1,file2){error()}:檢查檔案是否存在