cd /d D:QtDemo
qmake -project "QT+=widgets"
-project
選項指明使用第一種工作模式,它會掃描當前資料夾裡的各種檔案,然後生成對應的 .pro 檔案。"QT+=widgets"
是我們針對 Qt5 自定義的一行文字,qmake 會把它新增到 .pro 檔案裡。qmake 預設會將 QtCore、QtGui 模組新增到專案檔案裡,但是從 Qt4 發展到 Qt5 後,將 QtWidgets 模組從 QtGui 裡面分離出來了,新的 QtWidgets 模組不會自動新增,所以我們手動在命令裡新增了 QtWidgets 模組,即在 .pro 檔案裡新增一句QT+=widgets
。qmake
qmake 不帶任何選項就是預設工作在第二種模式,它會掃描專案檔案 QtDemo.pro,自動生成 Makefile 檔案。mingw32-make
MinGW 的生成工具是 mingw32-make,該命令執行之後,預設生成的是 release 版可執行程式,在 release 資料夾裡。mingw32-make debug
如果手動指定生成 release 版本目標程式,可以執行命令:mingw32-make release
如果希望同時生成 debug 和 release 兩種版本程式,就執行:mingw32-make all
執行這些命令後,可以在 debug 資料夾裡看到偵錯版的目標程式,在 release 資料夾裡看到優化發行版的目標程式,這兩個資料夾裡還有生成目標程式過程中的一些中間產物,如 moc_hellowidget.cpp、*.o 等。debugQtDemo.exe
如果要執行優化發行版程式:releaseQtDemo.exe
執行效果和之前小節的差不多,就不截圖了。對於 Linux 系統,檔案路徑的分隔符是 / ,並且在 Linux 裡的生成工具就是 make,比 mingw32-make 名字簡短。
######################################################################
# Automatically generated by qmake (3.1) Tue Jun 4 15:59:41 2019
######################################################################
QT+=widgets
TEMPLATE = app
TARGET = QtDemo
INCLUDEPATH += .
# The following define makes your compiler warn you if you use any
# feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
# Input
HEADERS += MyMainWindow.h
SOURCES += main.cpp MyMainWindow.cpp
QT+=widgets
是我們在 qmake 命令裡面指定新增的 QtWidgets 模組(即 widgets),因為隱藏包含了 QtCore(即 core)和 QtGui(即 gui),所以不用手動新增 core 和 gui。TEMPLATE = app
這代表生成的目標程式型別模板,app 是可執行的應用程式,另外還可以生成靜態庫和動態庫、外掛等等。一般大部分的模板都是 app 應用程式。TARGET = QtDemo
TARGET 指定目標程式的名字,在 Windows 系統裡就是 QtDemo.exe,在 Linux 系統裡可執行程式不需要擴充套件名,直接就叫 QtDemo。INCLUDEPATH += .
這句是將當前目錄.
新增到了包含路徑(INCLUDEPATH)裡,程式編譯時除了從 Qt 庫的包含路徑,還會從當前目錄裡尋找標頭檔案,比如 MyMainWindow.h 就在當前資料夾裡。至於 Qt 庫的包含路徑,qmake 自己預設就會新增,不需要我們操心的。DEFINES += QT_DEPRECATED_WARNINGS
當我們使用已被官方拋棄的 Qt 功能(語法、類、函數等)時,編譯器會給出警告。HEADERS += MyMainWindow.h
HEADERS 就是指定專案裡的標頭檔案。SOURCES += main.cpp MyMainWindow.cpp
SOURCES 就是指定專案裡的原始碼檔案。以後還會學到圖形介面檔案和資原始檔等,本節只需要標頭檔案和原始碼檔案。=
,也有+=
,這兩個的意義和 C++ 語法類似:=
是賦值,左邊的變數會被指定為右邊的值,並且僅僅是右邊的值;+=
是追加的意思,因為 qmake 會給一些變數預設新增 Qt 內建的一些值(如 Qt 庫的包含路徑),這些值是必需的,不能被取代,所以要用追加模式。