目錄
本教程教您qmake的基礎知識。
從簡單開始
假設您已經完成了應用程序的基本實現,並創建了以下文件:
- hello.cpp
- hello.h
- main.cpp
您可以在Qt發行版的examples/qmake/tutorial目錄中找到這些文件。 您對應用程序設置唯一瞭解的其他事情是它是用Qt編寫的。 首先,使用您喜歡的純文本編輯器,在examples/qmake/tutorial中創建一個名爲hello.pro的文件。 您需要做的第一件事是添加一些行,這些行告訴qmake有關開發項目的源文件和頭文件。
我們首先將源文件添加到項目文件中。 爲此,您需要使用SOURCES變量。 只需使用SOURCES +=開始新行,然後將hello.cpp放在其後即可。
SOURCES += hello.cpp
我們對項目中的每個源文件重複此操作,直到得到以下結果:
SOURCES += hello.cpp
SOURCES += main.cpp
如果您喜歡使用類似Make的語法,將所有文件一次性添加,則可以使用換行符轉義,如下所示:
SOURCES = hello.cpp \
main.cpp
源文件已列在項目文件中,現在必須添加頭文件。 這些文件的添加方式與源文件完全相同,只是我們使用的變量名是HEADERS。完成此操作後,您的項目文件應如下所示:
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
目標名稱是自動設置的。 它與項目文件名相同,但後綴適用於平臺。 例如,如果項目文件名爲hello.pro,則目標將是Windows上的hello.exe和Unix上的hello。 如果要使用其他名稱,可以在項目文件中進行設置:
TARGET = helloworld
完成的項目文件應如下所示:
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
現在,您可以使用qmake爲您的應用程序生成Makefile。 在命令行的項目目錄中,鍵入以下內容:
qmake -o Makefile hello.pro
然後根據您使用的編譯器鍵入make或nmake。
對於Visual Studio用戶,qmake也可以生成Visual Studio項目文件。 例如:
qmake -tp vc hello.pro
使應用程序可調試
應用程序的發行版不包含任何調試符號或其他調試信息。 在開發過程中,產生具有相關信息的應用程序的調試版本非常有用。 通過將調試添加到項目文件中的CONFIG變量,可以輕鬆實現此目的。例如:
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
像以前一樣使用qmake生成一個Makefile。 現在,在調試環境中運行應用程序時,您將獲得有關該應用程序的有用信息。
添加特定於平臺的源文件
經過幾個小時的編碼,您可能已經在應用程序的特定於平臺的部分開始,並決定將依賴於平臺的代碼分開。 因此,您現在有兩個新文件要包含到您的項目文件中:hellowin.cpp和hellounix.cpp。 我們不能僅將它們添加到SOURCES變量中,因爲這會將兩個文件都放在Makefile中。 因此,我們在這裏要做的是使用一個域,該域將根據我們要構建的平臺進行處理。
添加Windows平臺相關文件的簡單作用域如下所示:
win32 {
SOURCES += hellowin.cpp
}
當爲Windows構建時,qmake將hellowin.cpp添加到源文件列表中。 當爲任何其他平臺構建時,qmake只會忽略它。 現在剩下要做的就是爲Unix專用文件創建作用域。完成此操作後,您的項目文件應如下所示:
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
像以前一樣使用qmake生成一個Makefile。
停止qmake若指定文件不存在
如果某個文件不存在,則可能不想創建Makefile。 我們可以使用exist()函數檢查文件是否存在。 我們可以使用error()函數停止qmake的處理。檢查名爲main.cpp的文件如下所示:
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
!符號用於否定測試。 也就是說,如果文件存在,則exist(main.cpp)爲true;如果文件不存在,則!exists(main.cpp)爲true。
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
像以前一樣使用qmake生成一個makefile。 如果您臨時重命名main.cpp,則會看到該消息,並且qmake將停止處理。
檢查多個條件
假設您使用Windows,並且希望在命令行上運行應用程序時能夠使用qDebug()查看語句輸出。 要查看輸出,必須使用適當的控制檯設置來構建應用程序。 我們可以輕鬆地將控制檯放在CONFIG行上,以將該設置包括在Windows的Makefile中。 但是,假設我們只想在Windows上運行並且CONFIG行上已經有debug時添加CONFIG行。 這需要使用兩個嵌套的作用域。 首先創建一個作用域,然後在其中創建另一個作用域。 將要處理的設置放入第二個作用域,如下所示:
win32 {
debug {
CONFIG += console
}
}
可以使用冒號將嵌套範圍合併在一起,因此最終的項目文件如下所示:
CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
!exists( main.cpp ) {
error( "No main.cpp file found" )
}
win32:debug {
CONFIG += console
}
現在,您已經完成了qmake的教程,並準備爲開發項目編寫項目文件。