1. 程式人生 > >QT中pro、pri、prf、prl檔案

QT中pro、pri、prf、prl檔案

QT .pro檔案

在QT中使用qmake自動生成pro檔案,如果要自己定製工程選項,則需要自行修改pro檔案。

pro檔案有以下關鍵字:TEMPLATE、TARGET、DESTDIR、DEPENDPATH、INCLUDEPATH、SOURCES、HEADERS、FORMS、LIBS、TRASHLATIONS、RESOURCES、CONFIG、UI_DIR、RCC_DIR、MOC_DIR、OBJECTS_DIR、DEFINES。

其中:TEMPLATE變數定義了工程的編譯模式,預設編譯為app。TEMPLATE可以為:app、lib(庫)、subdirs(多級目錄管理)等。
 

TARGET:生成目標的名字。如:TARGET = mylib

DESTDIR:生成目標的路徑。如:DESTDIR = ../bin/ 則目標檔案的路徑為當前pro檔案所在目錄的上一級的bin目錄下

DEPENDPATH:工程的依賴路徑

INCLUDEPATH:指定工程要用到的標頭檔案路徑,一般包括使用者自定義的標頭檔案路徑或沒有放入系統標頭檔案路徑的標頭檔案路徑

SOURCES:工程需要的原始檔

HEADERS:工程所需要的標頭檔案,一般包括使用者自定義的標頭檔案或未放入系統標頭檔案路徑的標頭檔案

FORMS:工程要用到的ui檔案(ui檔案時用QT設計器生成的)

LIBS:載入動態庫檔案。如:LIBS+=./mitab/libmitab.so

TRASHLATIONS:載入要用到的語言翻譯*.ts檔案

RESOURCES:載入要用到的資源*.qrc檔案

CONFIG:告訴qmake應用程式的配置資訊:這個變數可以用來指定是生成debug模式還是release模式,也可以都生成;也可以用來開啟編譯器警告(warn_on輸出儘可能多的警告資訊)或者關閉(warn_off -編譯器會輸出儘可能少的警告資訊);還可以用來配置要Qt載入庫,例如如果要用到Qt的多執行緒,則:CONFIG+=qt thread再例如配置debug或release模式:
CONFIG +=debug_and_release
CONFIG(debug,debug|release){
TARGET= hello
DESTDIR= ./debug
}else{
TARGET= hello
DESTDIR= ./release
}
如果你要在windows下面執行console:CONFIG +=console

UI_DIR:UIC將ui轉化為標頭檔案所存放的目錄

RCC_DIR:RCC將qrc檔案轉化為標頭檔案所存放的目錄;

MOC_DIR:MOC命令將含Q_OBJECT的標頭檔案轉換為標準的標頭檔案存放的目錄;

OBJECTS_DIR:生成的目標檔案存放的目錄;

DEFINES:應用程式所需的額外的預處理程式定義的列表#在.h檔案中就可以使用:#ifdefinexx_xx_xxx;

LIBS += -L folderPath //引入的lib檔案的路徑 -L:引入路徑

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

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

RC_FILE = xxx.icns //程式中所用到的圖片等資原始檔;

QT是跨平臺的,所以我們在不同的平臺上用同一個pro檔案,這要加入有關平臺的資訊。windows平臺是win32,Linux平臺是unix。
例如在Windows和Linux的動態庫檔案格式是不一樣的,一個是lib檔案一個是so檔案:win32:LIBS+= ./mitab/mitab_i.lib   unix:LiBS+= ./mitab/libmitab.so
再如:win32{SOURCES+= hello_win.cpp //win平臺}   unix{SOURCES+= hello_linux.cpp //unix/linux平臺}

可以通過在其它任何一個變數的變數名前加$$來把這個變數的值分配給當前的變數,例如:MY_DEFINES= $$DEFINE #將DEFINE的值分配給MY_DEFINES
又如:
TARGET = myapp
UI_DIR = ../bin/$$TARGET/ui
MOC_DIR = ../bin/$$TARGET/moc
OBJECTS_DIR = ../bin/$$TARGET/objects
則uic所生成的檔案在路徑../bin/myapp/ui目錄下;moc檔案在../bin/myapp/moc目錄下;obj目標檔案在../bin/myapp/objects目錄下。

上文摘自:https://www.cnblogs.com/boright88/p/6264642.html

另外常常會在pro或者pri檔案中見到$$PWD,其代表pro或者pri檔案的當前路徑。

另外QT中的pro專案檔案作用主要通過QT中整合的qmake來說生成對應的makefile檔案,然後對所有的原始檔進行編譯,(vs的老版本中以前也有與makefile的功能nmake,現在已經沒了,筆者認為vs應該也是用nmake對vcproj檔案操作去生成makefile檔案,完後對原始檔統一編譯)。

QT中,有關qmake與makefile的關係可以看:https://blog.csdn.net/simonforfuture/article/details/78580510

pri、prf、prl

pri其實都可以被pro專案檔案代替,pri的存在只是為了更好的講pro劃分,一般是將原始檔的包含部分單獨放在pri檔案中,另外pri檔案中還可以在引入pri檔案(引入格式與pro中引入pri檔案一樣),當然需要在pro中加上類似於這用語句將其連線起來:

include($$PWD/../../../src/ui/mapwidget/mapwidget.pri)

對於prf、prl一般很少自己編寫

對於三者的詳細介紹說明,參考https://blog.csdn.net/dbzhang800/article/details/6348432