QT中PRO文件寫法的詳細介紹

轉自http://blog.chinaunix.net/uid-23592843-id-2495471.html
在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 += .

源文件編碼方式
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

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

win32 {SOURCES += hello_win.cpp}

當你已經創建好你的項目文件,生成Makefile就很容易了,你所要做的就是先到你所生成的項目文件那裏然後輸入:

Makefile可以像這樣由“.pro”文件生成:

qmake -oMakefile hello.pro

對於VisualStudio的用戶,qmake也可以生成“.dsp”文件,例如:

qmake -tvcapp -o hello.dsp hello.pro

++++++++++++++++++++++++一個PRO文件實例++++++++++++++++++++++++++++++++++++++++

TEMPLATE = app #模塊配置
LANGUAGE = C++ #C++語言

CONFIG += qt warn_on debug release

引入的lib文件,用於引入動態鏈接庫
LIBS += qaxcontainer.lib

頭文件包含路徑
INCLUDEPATH += ….\qtcompnent\qtchklisten\inc ….\qtcompnent\qtclearfile\inc ../../validator\inc\validerrcode ../../qtcompnent/qtdir/inc ../inc ../../utillib/inc/xmlapi ../../utillib/inc/util ../../xercesc ../../qtcompnent/qteditor/inc ../../qtcompnent/qtfunreview/inc ../../qtcompnent/qttable/inc ../../qtcompnent/qtversion/inc ../../qtcompnent/qtini/inc ../../icdtool/icdservices/inc ../../icdtool/dataset/inc ../../icdtool/doi/inc ../../icdtool/reportcontrol/inc ../../icdtool/GSEconctrol/inc ../../icdtool/inputs/inc ../../icdtool/SMVconctrol/inc ../../icdtool/logcontrol/inc ../../scdpreview/inc/scdpreviewtoollib ../../scdpreview/form ../../icdtool/sclcontrol/inc ../../icdtool/log/inc ../../icdtool/settingcontrol/inc ../../qtcompnent\qteditor\inc ../../qtcompnent\qttreeview\inc ../../qtcompnent\qttabwidget\inc ../../communication/inc ../../qtcompnent/qtabout/inc ../iedmanage/inc ../ldmanage/inc ../foriecrun/inc ../../qtcompnent\validset\inc

工程中包含的頭文件
HEADERS += ../inc/exportstable.h \
../inc/maintabwidget.h \
../inc/outputtab.h \
../inc/strutil.h \
../inc/treeeditview.h \
../inc/MainForm.h \
../inc/recenfileini.h \
../inc/ExportCIDFunction.h

工程中包含的源文件
SOURCES += ../src/main.cpp \
../src/exportstable.cpp \
../src/maintabwidget.cpp \
../src/outputtab.cpp \
../src/treeeditview.cpp \
../src/MainForm.cpp \
../src/recenfileini.cpp \
../src/ExportCIDFunction.cpp

工程中包含的.ui設計文件
FORMS = ../form/scdmainform.ui \
../form/exportiedform.ui \
../form/Exportsedform.ui \
../form/Importsedform.ui \
../form/formiminputs.ui

圖像文件

IMAGES = images/substation.png \
images/communication.png \
images/autocom.png \
images/reportcfg.png \
images/comcfg.png \
images/filetrans.png \
images/review.png \
images/setting.png

工程中包含的資源文件
RESOURCES = Scintilla.qrc

CONFIG -= release
CONFIG -= debug

RC_FILE = scdtool.rc

BINLIB = ../../bin ../../xercesc/lib

UI_HEADERS_DIR = ../inc # .ui文件轉會爲**.h 存放的目錄
UI_SOURCES_DIR = ../src # .ui文件轉會爲**.cpp 存放的目錄
QMAKE_LIBDIR = $${BINLIB}

release {
TARGET = scdtool #指定生成的應用程序名
OBJECTS_DIR = ../../obj/scdtool/release #指定目標文件(obj)的存放目錄
}
debug {
TARGET = scdtool_d #指定生成的應用程序名
OBJECTS_DIR = ../../obj/scdtool/debug #指定目標文件(obj)的存放目錄
}

MOC_DIR = $${OBJECTS_DIR}
DESTDIR = ../../bin #指定生成的應用程序放置的目錄

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

1.簡介:
  qmake是Trolltech公司創建的用來爲不同的平臺和編譯器書寫Makefile的工具。是qt工具包的一部分.在Unixstdio.h>
  int main(int argc, char** argv)
  {
  printf(“Hello, world!\n”);
  return 0;
  }
  創建qmake需要的項目文件(hello.pro),
  SOURCES = hello.cpp
  CONFIG += qt warn_on release
  Makefile可以像這樣由”.pro”文件生成:
  qmake -o Makefile hello.pro
  現在你的目錄下已經產生了一個 Makefile 文件,輸入”make” 指令就可以開始編譯 hello.c 成執行文件,執行 ./hello 和 world 打聲招呼吧!打開這個Makefile文件看看,是不是很專業啊!
  
  4.高級操作技巧
  當然,在實際使用過程中,我們的工程不可能象這個程序這樣簡單的,它可能有多個目錄,多個頭文件,多個源文件,需要鏈接器它不同的鏈接庫等等情況。別急,讓我和你慢慢道來。這些都是非常容易用qmake來實現的。我們從一個更加複雜的項目文件爲例和你詳細的講訴qmake的高級技巧:
  項目文件示例:
  SOURCES += myqt.cpp
  SOURCES += main.cpp
  HEADERS += myqt.h
  FORMS += xsimform.ui
  TEMPLATE = lib
  CONFIG += debug warn_on qt thread x11 plugin
  TARGET = ../bin/panel_qt
  INCLUDEPATH = ../../../../xsim ../../../../xsim/IMdkit
  DEFINES = BDB_VERSION4 OS_LINUX
  從這個文件可以知道,SOURCES變量指向項目中的源文件,當項目中有多個源文件時,我們需對項目中的每一個源文件都這樣做,直到結束:

  SOURCES += hello.cpp
  SOURCES += main.cpp
  當然,如果你喜歡使用像Make一樣風格的語法,你也可以寫成這樣,一行寫一個源文件,並用反斜線結尾,然後再起新的一行:
  SOURCES = hello.cpp main.cpp
  HEADERS變量指向項目中的頭文件,多個頭文件的時候,和多個源文件的解決方法一致。
  FORMS變量指向項目中使用到的窗體文件(qtdesign設計的.ui文件),qmake也注意了Qt的特殊需求,可以自動的包含moc和uic的連編規則。沒有的話或者非qt程序可以不寫。
  TEMPLATE變量告訴qmake爲這個應用程序生成哪種makefile。下面是可供使用的選擇:
  app - 建立一個應用程序的makefile。這是默認值,所以如果模板沒有被指定,這個將被使用。
  lib - 建立一個鏈接庫的makefile。
  vcapp - 建立一個應用程序的Visual Studio項目文件。
  vclib - 建立一個庫的Visual Studio項目文件。
  subdirs - 這是一個特殊的模板,它可以創建一個能夠進入特定目錄並且爲一個項目文件生成makefile並且爲它調用make的mkefile。
  CONFIG變量變量指定了編譯器所要使用的選項和所需要被連接的庫。配置變量中可以添加任何東西,但只有下面這些選項可以被qmake識別。

  下面這些選項控制着使用哪些編譯器標誌:
  release - 應用程序將以release模式連編。如果”debug”被指定,它將被忽略。
  debug - 應用程序將以debug模式連編。
  warn_on - 編譯器會輸出儘可能多的警告信息。如果”warn_off”被指定,它將被忽略。
  warn_off - 編譯器會輸出儘可能少的警告信息。
  下面這些選項定義了所要連編的庫/應用程序的類型:
  qt - 應用程序是一個Qt應用程序,並且Qt庫將會被連接。
  thread - 應用程序是一個多線程應用程序。
  x11 - 應用程序是一個X11應用程序或庫。
  windows - 只用於”app”模板:應用程序是一個Windows下的窗口應用程序。
  console - 只用於”app”模板:應用程序是一個Windows下的控制檯應用程序。
  dll - 只用於”lib”模板:庫是一個共享庫(dll)。
  staticlib - 只用於”lib”模板:庫是一個靜態庫。
  plugin - 只用於”lib”模板:庫是一個插件,這將會使dll選項生效。
  TARGET變量指定生成的二進制代碼的路徑和文件名,如果建立的是一個鏈接庫的話,它會在文件名前面自動加上”lib”和在最後自動加上”.so”.
  我們在使用過程中可能會使用到另外的一些函數庫,鏈接庫等。函數庫的頭文件指定使用INCLUDEPATH變量,其它鏈接庫的指定可以通過LIBS 變量來指定,例LIBS += -lmath -L/usr/local/lib
  DEFINES變量的指定就如同make的-D選項一樣。
  
  結束語
  Autoconf 和 Automake 功能十分強大,但對於普通用戶來說,太過複雜。qmake方便、簡單、快捷,是一個輕量級的makefile生成工具,雖然它是qt工具包的一部分,但它也完全可以用來進行其它程序makefile文件的生成,對於大多數人來說,它已經是非常的夠用了。你也可以從qt提供的許多現存的源程序中找到相關的.pro項目文件,它們是學習qmake 更多技巧的最佳範例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章