1. 注釋
從“#”開始,到這一行結束。
2. 模闆變量告訴qmake為這個應用程式生成哪種makefile。下面是可供使用的選擇:
TEMPLATE = app
A> app -建立一個應用程式的makefile。這是預設值,是以如果模闆沒有被指定,這個将被使用。
B> lib - 建立一個庫的makefile。
C> vcapp - 建立一個應用程式的VisualStudio項目檔案。
D> vclib - 建立一個庫的VisualStudio項目檔案。
E> subdirs -這是一個特殊的模闆,它可以建立一個能夠進入特定目錄并且為一個項目檔案生成makefile并且為它調用make的makefile。
3. 基礎檔案設定
CODECFORSRC = GBK #指定源檔案編碼方式
HEADERS += include/painter.h #工程中包含的頭檔案
FORMS += forms/painter.ui #工程中包含的.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 #程式圖示
4. 指定生成的應用程式名
TARGET = pksystem
5. 配置資訊
CONFIG用來告訴qmake關于應用程式的配置資訊。
例如 CONFIG+= qt warn_on release c++11
在這裡使用“+=”,是因為我們添加我們的配置選項到任何一個已經存在中。這樣做比使用“=”那樣替換已經指定的所有選項是更安全的。
A> qt部分告訴qmake這個應用程式是使用Qt來連編的。這也就是說qmake在連接配接和為編譯添加所需的包含路徑的時候會考慮到Qt庫的。所有的Qt庫都需要在CONFIG中添加之後才能使用,例如添加thread才能使用多線程庫。
B> warn_on部分告訴qmake要把編譯器設定為輸出警告資訊的。
C> release部分告訴qmake應用程式必須被連編為一個釋出的應用程式。在開發過程中,程式員也可以使用debug來替換release。
D> 使用C++11的特性
6. 指定生成的應用程式放置的目錄
DESTDIR += ../bin
7. 指定uic指令将.ui檔案轉化成ui_*.h檔案的存放的目錄
UI_DIR += forms
8. 指定rcc指令将.qrc檔案轉換成qrc_*.h檔案的存放目錄
RCC_DIR += ../tmp
9. 指定moc指令将含Q_OBJECT的頭檔案轉換成标準.h檔案的存放目錄
MOC_DIR += ../tmp
10. 指定目标檔案(obj)的存放目錄
OBJECTS_DIR += ../tmp
11. 程式編譯時依賴的相關路徑
DEPENDPATH += . forms include qrc sources
12. 頭檔案包含路徑
INCLUDEPATH += .
13. 執行qmake時輸出消息
message(XXX) 會在執行qmake時輸出括号中的内容
14. 擷取系統參數
如 $$(PATH) 可以讀取環境變量中的PATH
15. 平台相關性處理
我們在這裡需要做的是根據qmake所運作的平台來使用相應的作用域來進行處理。為Windows平台添加的依賴平台的檔案的簡單的作用域看起來就像這樣:
win32 {
SOURCES += hello_win.cpp
}
Linux或Unix使用作用域unix。
16. 使用系統指令
主要是使用system關鍵字
例如拷貝檔案到指定目錄
win32 {
src_dir = $$PWD\Resources\*.*
CONFIG(debug, debug|release) {
dst_dir = $$OUT_PWD\\debug\\Resources\\
} else {
dst_dir = $$OUT_PWD\\release\\Resources\\
}
# dst_dir 最後的 \\ 是必須的,用來标示 xcopy 到一個檔案夾,若不存在,建立之
# Replace slashes in paths with backslashes for Windows
src_dir ~= s,/,\\,g
dst_dir ~= s,/,\\,g
!exists($$dst_dir):system(xcopy $$src_dir $$dst_dir /y /e)
}