.pro文件
.pro文件包含了qmake構建應用程序、庫或插件所需的所有信息。你可以使用一系列的聲明去指定工程中的各種資源。
.pro文件組成元素
-
變量(Variables)
.pro文件中,變量用於存儲字符串。它們通知qmake要使用的配置項,或者提供構建(build)過程中使用的文件名和路徑。
qmake會在每個.pro文件中查找特定的變量,並使用這些變量來向Makefile寫入什麼。例如,HEADERS和SOURCES告訴qmake頭文件和源碼文件有哪些。SOURCES += \ main.cpp \ mainwindow.cpp HEADERS += \ mainwindow.h
下表是一些常用的變量:
變量名 | 作用 |
---|---|
CONFIG | 通用的項目配置項 |
DESTDIR | 可執行文件和二進制文件的目錄 |
FORMS | ui文件列表 |
HEADERS | 頭文件名列表 |
QT | 項目中用到的Qt模塊列表 |
RESOURCES | 資源文件(.qrc)列表 |
SOURCES | 源碼文件列表 |
TEMPLATE | 項目輸出的類型(決定了構建過程的輸出是應用程序、庫還是插件) |
變量的內容可以通過在變量名前加"$$"來獲取,這可以將一個變量的值給另一個變量。(該操作符用於對字符串和值列表進行操作)
TEMP_SOURCES = $$SOURCES
Note:若變量值中含有空格,則必須將值括在雙引號中
DEST = "Program Files"
-
註釋(Comments)
你可以向.pro文件添加註釋。註釋以#字符開始,並一直延續到同一行的末尾。例如:# The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings
Note:若變量賦值中包含#字符,需使用LITERAL_HASH標記變量的內容。例如:
# To include a literal hash character, use the $$LITERAL_HASH variable: urlPieces = http://doc.qt.io/qt-5/qtextdocument.html pageCount message($$join(urlPieces, $$LITERAL_HASH))
-
內置函數和控制流(Built-in Functions and Control Flow)
qmake提供了許多內置函數來處理變量的值。最常用的應該就是include()函數了,它以文件名作參數。指定的文件的內容將會包含在工程中。include(other.pro)
它也支持條件結構(條件結構是通過作用域提供的,作用域的行爲類似編程語言中的if語句)
win32 { SOURCES += paintwidget_win.cpp }
大括號內的賦值僅在條件爲真時執行。這種情況下,必須設置win32配置項(該項在windows上會自動生成)。左括號必須和條件在同一行上。
工程模板(Project Templates)
TEMPLATE 變量用於定義構建的工程類型。若工程文件中沒有顯示聲明它,qmake默認構建一個應用程序,並生成一個適當的Makefile(或者其它的等效文件)。
下表描述了可用的工程類型,
模板名 | qmake輸出類型 |
---|---|
app(默認) | 應用程序(application) |
lib | 庫 |
aux | 什麼都不做,如果不需要調用任何編譯器來創建目標,則使用此方法,例如你的項目是用解釋型語言編寫的(注意:此模板類型僅適用於基於makefile的生成器。它不能與vcxproj和Xcode生成器一起工作) |
subdirs | Makefile包含使用SUBDIRS變量指定的子目錄規則。每個子目錄必須包含自己的工程文件 |
vcapp | vs應用程序 |
vclib | vs庫 |
vcsubdirs | 在子目錄中構建vs解決方案文件 |
當使用subdirs模板時,qmake生成一個Makefile來檢查每個指定的子目錄,處理其中找到的任何工程文件,並且在新創建的Makefile上運行平臺make工具。SUBDIRS變量用於包含所有要處理的子目錄列表。
常用配置項(General Configuration)
CONFIG變量指定了工程的配置項和特性。
工程可以在release或debug模式下構建。若同時指定了release和debug,則最後一個指定的會生效。如果指定debug_and_release選項來構建工程,那麼qmake生成的Makefile包含兩個版本的規則,它可以通過以下方式調用:
make all
將build_all項目加入CONFIG將使該規則成爲構建工程時的默認規則。
注意:CONFIG變量中每個選項都可作爲作用域條件。你可以使用CONFIG()函數測試該配置是否存在。例如,下面幾行代碼演示了CONFIG()函數用作作用域條件時,以測試是否存在opengl選項
CONFIG(opengl) {
message(Building with OpenGL support.)
} else {
message(OpenGL support is not available.)
}
這使得爲不同環境不同模式提供不同配置成爲可能。
下面選項定義要構建的項目類型。
注意:有些選項只在相關平臺上使用纔會生效。
配置項 | 描述 |
---|---|
qt | 該工程是一個Qt應用程序,應該鏈接到Qt庫。你可以使用Qt變量來控制應用程序額外所需的Qt模塊。默認情況下,這個值就是有的,不過你可以移除它來爲非Qt工程使用qmake |
x11 | 工程指定爲x11應用程序或庫,如果目標文件是Qt則不需要此值 |
應用程序和庫工程模板提供給你更轉業的配置項去優化工程的構建過程。這些選項在構建通用工程類型中有詳細說明。
例如若你的應用程序使用Qt庫,並且你想要在debug模式中構建它,那麼你的.pro可以這麼寫:
CONFIG += qt debug
添加Qt內部庫(Declaring Qt Libraries)
若CONFIG變量包含qt值,則會啓用qmake對qt應用程序的支持。這樣就能讓你的應用程序更好地使用Qt模塊。例如,我們可以通過下面代碼啓用XML和網絡模塊:
QT += network xml
注意:Qt默認包含core模塊和gui模塊。所以上面的聲明是用"+="將網絡和XML模塊添加到默認列表中,下面的代碼省略了默認模塊,編譯時會發生錯誤:
QT = network xml # This will omit the core and gui modules.
若你想要從工程中移除一個模塊,可以使用"-=",
QT -= gui # Only the core module is used.
添加配置特性(Configuration Features)
qmake可以在feature(.prf)文件中配置額外的特性。這些額外的特性通常爲構建過程中使用的自定義工具提供支持。要在構建過程中添加功能,需要將功能部件名稱添加到CONFIG變量中。
例如,qmake可以配置構建過程,以使用pkg-config支持的外部庫,如D-Bus和ogg庫:
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
添加外部庫(Declaring Other Libraries)
若你在工程中使用了外部庫,你需要在.pro中指定它們。
qmake搜索庫和指定鏈接庫的路徑需要添加到LIBS變量的值列表中。你可以指定庫的路徑,或者使用unix風格的符號來指定庫和路徑。
下面代碼展示瞭如何指定庫:
LIBS += -L/usr/local/lib -lmath
你還可以使用INCLUDEPATH變量來指定包含的頭文件路徑。
INCLUDEPATH = c:/msdev/include d:/stl/include
參考
- qmake-manual.html