天天看點

qmake 3.1(Qt 5.14.0使用)使用者手冊3——建立項目檔案項目檔案元素項目模闆正常配置聲明Qt庫配置功能聲明其他庫

目錄

項目檔案元素

變量

擴充變量值

常用變量

讀取變量值

空格

注釋

内置功能和控制流程

項目模闆

正常配置

聲明Qt庫

配置功能

聲明其他庫

項目檔案包含qmake生成應用程式,庫或插件所需的所有資訊。通常,您使用一系列聲明來指定項目中的資源,但是對簡單程式設計結構的支援使您能夠描述針對不同平台和環境的不同建構過程。

項目檔案元素

qmake使用的項目檔案格式可用于支援簡單和相當複雜的建構系統。簡單的項目檔案使用簡單的聲明式樣式,定義标準變量以訓示項目中使用的源檔案和頭檔案。複雜的項目可能會使用控制流結構來微調建構過程。

以下各節描述了項目檔案中使用的不同類型的元素。

變量

在項目檔案中,變量用于儲存字元串清單。在最簡單的項目中,這些變量通知qmake要使用的配置選項,或提供在建構過程中使用的檔案名和路徑。

qmake在每個項目檔案中查找某些變量,并使用這些變量的内容來确定應将哪些内容寫入Makefile。例如,HEADERS和SOURCES變量中的值清單用于告訴qmake與項目檔案位于同一目錄中的頭檔案和源檔案。

變量也可以在内部用于存儲臨時值清單,并且現有值清單可以用新值覆寫或擴充。

以下代碼段說明了如何将值清單指派給變量:

  HEADERS = mainwindow.h paintwidget.h
           

擴充變量值

變量中的值清單以以下方式擴充:

  SOURCES = main.cpp mainwindow.cpp \
            paintwidget.cpp
  CONFIG += console
           

注意:第一個指派隻包括與HEADERS變量在同一行上指定的值。 第二個指派使用反斜杠(\)将SOURCES變量中的值劃分為多行。

CONFIG變量是qmake生成Makefile時使用的另一個特殊變量。 在正常配置中讨論。 在上面的代碼段中,控制台被添加到CONFIG中包含的現有值清單中。

常用變量

下表列出了一些常用變量并描述了它們的内容。 有關變量及其說明的完整清單,請參見變量。

變量名 含義
CONFIG 正常項目配置選項
DESTDIR 可執行檔案或二進制檔案所在的目錄
FORMS 使用者界面編譯器(uic)要處理的UI檔案清單
HEADERS 生成項目時使用的頭檔案(.h)的檔案名清單
QT 項目中使用的Qt子產品清單
RESOURCES 最終項目中将包括的資源(.qrc)檔案清單。 有關這些檔案的更多資訊,請參見Qt資源系統
SOURCES 生成項目時要使用的源代碼檔案清單
TEMPLATE 用于項目的模闆。 這确定了建構過程的輸出是應用程式,庫還是插件

讀取變量值

變量的值可以通過在變量名前添加$$來讀取。 這可用于将一個變量的内容指派給另一個:

  TEMP_SOURCES = $$SOURCES
           

$$運算符廣泛用于對字元串和值清單進行操作的内置函數。 有關更多資訊,請參見qmake語言。

空格

通常,空格分隔變量指派中的值。 要指定包含空格的值,必須将值用雙引号引起來:

  DEST = "Program Files"
           

引用的文本在變量所儲存的值清單中被視為單個項目。 使用類似的方法來處理包含空格的路徑,尤其是在為Windows平台定義INCLUDEPATH和LIBS變量時:

  win32:INCLUDEPATH += "C:/mylibs/extra headers"
  unix:INCLUDEPATH += "/home/user/extra headers"
           

注釋

您可以将注釋添加到項目檔案。 注釋以#字元開頭,并繼續到同一行的末尾。 例如:

  # Comments usually start at the beginning of a line, but they
  # can also follow other content on the same line.
           

要将#字元包含在變量配置設定中,必須使用内置LITERAL_HASH變量的内容。

内置功能和控制流程

qmake提供了許多内置函數來啟用變量内容的處理。 簡單項目檔案中最常用的函數是include()函數,該函數以檔案名作為參數。 給定檔案的内容包含在使用include函數的位置的項目檔案中。 包含函數最常用于包含其他項目檔案:

  include(other.pro)
           

可通過作用域來提供對條件結構的支援,作用域的行為類似于程式設計語言中的if語句:

  win32 {
      SOURCES += paintwidget_win.cpp
  }
           

僅當條件為真時,才進行大括号内的指派。在這種情況下,必須設定win32 CONFIG選項。這在Windows上自動發生。

内置函數(例如find(),unique()和count())對通常需要循環的變量進行更複雜的操作。提供了這些功能以及許多其他功能來操縱字元串和路徑,支援使用者輸入以及調用外部工具。有關使用功能的更多資訊,請參見qmake語言。有關所有功能及其說明的清單,請參見替換功能和測試功能。

項目模闆

TEMPLATE變量用于定義将要建構的項目的類型。如果未在項目檔案中聲明它,則qmake假定應建構一個應用程式,并将為此目的生成一個适當的Makefile(或等效檔案)。

下表總結了可用的項目類型,并描述了qmake将為其生成的檔案:

模闆 qmake輸出
app (default) 建構一個應用程式的Makefile
lib 建構一個庫的Makefile
aux 不建構任何東西的Makefi。 如果不需要調用任何編譯器來建立目标,請使用此選項,例如,因為您的項目是用解釋語言編寫的。注意:此模闆類型僅适用于基于Makefile的生成器。 特别是,它不适用于vcxproj和Xcode生成器。
subdirs Makefile包含使用SUBDIRS變量指定的子目錄的規則。 每個子目錄必須包含其自己的項目檔案
vcapp 建構應用程式的Visual Studio項目檔案
vclib 建構庫的Visual Studio項目檔案
vcsubdirs 可在子目錄中生成項目的Visual Studio解決方案檔案

有關為使用app和lib模闆的項目編寫項目檔案的建議,請參閱建立常見類型的項目。

使用subdirs模闆時,qmake會生成一個Makefile來檢查每個指定的子目錄,處理在該目錄中找到的任何項目檔案,然後在新建立的Makefile上運作平台的make工具。 SUBDIRS變量用于包含所有要處理的子目錄的清單。

正常配置

CONFIG變量指定應使用項目配置的選項和功能。

可以以釋出模式或調試模式,或兩者都建構項目。 如果同時指定了debug和release,則最後一個生效。 如果指定debug_and_release選項以生成項目的調試和發行版本,則qmake生成的Makefile包含同時生成這兩個版本的規則。 可以通過以下方式調用它:

  make all
           

将build_all選項添加到CONFIG變量将使該規則成為建構項目時的預設規則。

注意:CONFIG變量中指定的每個選項也可以用作範圍條件。 您可以使用内置的CONFIG()函數測試某些配置選項的存在。 例如,以下幾行将函數作為條件顯示在範圍中,以測試是否僅使用了opengl選項:

  CONFIG(opengl) {
      message(Building with OpenGL support.)
  } else {
      message(OpenGL support is not available.)
  }
           

這樣可以為釋出和調試版本定義不同的配置。 有關更多資訊,請參見使用範圍。

以下選項定義了要建構的項目的類型。注意:其中某些選項僅在相關平台上使用時才生效。

選項 描述
qt 該項目是需要連結到Qt庫的Qt應用程式。 您可以使用QT變量來控制應用程式所需的任何其他Qt子產品。 預設情況下會添加此值,但您可以将其删除以将qmake用于非Qt項目。
x11 該項目是X11應用程式或庫。 如果目标使用Qt,則不需要此值。

應用程式和庫項目模闆為您提供了更專業的配置選項,以微調建構過程。 在建構常見類型項目中詳細說明了這些選項。

例如,如果您的應用程式使用Qt庫,并且您想在調試模式下建構它,則您的項目檔案将包含以下行:

  CONFIG += qt debug
           

注意:您必須使用“+=”,而不是“=”,否則qmake将無法使用Qt的配置來确定項目所需的設定。

聲明Qt庫

如果CONFIG變量包含qt值,則啟用qmake對Qt應用程式的支援。 這樣可以對應用程式使用哪個Qt子產品進行微調。 這是通過QT變量實作的,該變量可用于聲明所需的擴充子產品。 例如,我們可以通過以下方式啟用XML和網絡子產品:

  QT += network xml
           

注意:預設情況下,QT包括core和gui子產品,是以上述聲明将network和XML子產品添加到此預設清單中。 以下設定忽略了預設子產品,并且在編譯應用程式的源代碼時将導緻錯誤:

  QT = network xml # This will omit the core and gui modules.
           

如果要建構不帶gui子產品的項目,則需要使用“-=”運算符将其排除。 預設情況下,QT同時包含core和gui,是以以下代碼行将導緻建構最少的Qt項目:

  QT -= gui # Only the core module is used.
           

有關可以添加到QT變量的Qt子產品的清單,請參見QT。

配置功能

可以使用功能(.prf)檔案中指定的其他配置功能來設定qmake。 這些額外的功能通常為在建構過程中使用的自定義工具提供支援。 要将功能添加到建構過程中,請将功能名稱(功能檔案名的詞幹)附加到CONFIG變量中。

例如,qmake可以配置建構過程以利用pkg-config支援的外部庫,例如D-Bus和ogg庫,并帶有以下幾行:

  CONFIG += link_pkgconfig
  PKGCONFIG += ogg dbus-1
           

有關添加功能的更多資訊,請參見添加新配置功能。

聲明其他庫

如果您正在項目中使用Qt随附的庫以外的其他庫,則需要在項目檔案中指定它們。

可以将qmake搜尋庫的路徑以及要連結的特定庫添加到LIBS變量的值清單中。 您可以指定庫的路徑,也可以使用Unix樣式的符号來指定庫和路徑。

例如,以下幾行顯示了如何指定庫:

  LIBS += -L/usr/local/lib -lmath
           

也可以使用INCLUDEPATH變量以類似方式指定包含頭檔案的路徑。例如,要添加幾個要搜尋的頭檔案路徑:

  INCLUDEPATH = c:/msdev/include d:/stl/include
           

繼續閱讀