プロジェクトファイルの作成

プロジェクトファイルには、アプリケーションやライブラリ、プラグインをビルドするために qmake が必要とするすべての情報が含まれています。一般的に、プロジェクト内のリソースを指定するために一連の宣言を使用しますが、単純なプログラミング構文のサポートにより、異なるプラットフォームや環境に対して異なるビルドプロセスを記述することができます。

プロジェクトファイルの要素

qmake が使用するプロジェクトファイル形式は、単純なビルドシステムとかなり複雑なビルドシステムの両方をサポートするために使用できます。単純なプロジェクトファイルでは、プロジェクトで使用されるソースファイルやヘッダーファイルを示す標準変数を定義する、わかりやすい宣言的なスタイルを使用します。複雑なプロジェクトでは、ビルドプロセスを微調整するために制御フロー構造を使用することができます。

以下のセクションでは、プロジェクト・ファイルで使用されるさまざまなタイプの要素について説明します。

変数

プロジェクト・ファイルでは、変数を使って文字列のリストを保持します。最も単純なプロジェクトでは、これらの変数は qmake に使用する設定オプションを通知したり、ビルドプロセスで使用するファイル名やパスを提供したりします。

qmake は各プロジェクトファイルで特定の変数を探し、その内容を使って Makefile に何を書き込むかを決定します。例えば、HEADERS変数とSOURCES変数の値のリストは、qmake がプロジェクトファイルと同じディレクトリにあるヘッダーファイルとソースファイルについて指示するために使用されます。

変数は一時的な値のリストを格納するために内部的に使用することもでき、既存の値のリストを上書きしたり、新しい値で拡張したりすることができます。

以下のスニペットは、値のリストがどのように変数に代入されるかを示しています:

HEADERS = mainwindow.h paintwidget.h

変数内の値のリストは次のように拡張されます:

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

注: 最初の代入は、HEADERS 変数と同じ行に指定された値のみを含みます。2番目の代入は、SOURCES 変数内の値をバックスラッシュ(˶‾ ˶)を使って行をまたいで分割します。

CONFIG変数は、qmake が Makefile を生成するときに使用するもう一つの特別な変数です。一般的な設定」で説明されています。上のスニペットでは、CONFIG に含まれる既存の値のリストに、console が追加されています。

次の表は、頻繁に使用される変数の一覧とその内容です。変数の全リストとその説明については、変数を参照してください。

変数内容
CONFIG一般的なプロジェクト設定オプション。
DESTDIR実行ファイルまたはバイナリ・ファイルを置くディレクトリ。
FORMSユーザー・インターフェース・コンパイラ(uic)が処理するUIファイルのリスト。
HEADERSプロジェクトをビルドするときに使用するヘッダーファイル(.h)のファイル名のリスト。
QTプロジェクトで使用されるQtモジュールのリスト。
RESOURCES (リソース)最終プロジェクトに含まれるリソースファイル (.qrc) のリスト。これらのファイルの詳細についてはThe Qt Resource Systemを参照してください。
ソースプロジェクトをビルドするときに使用するソースコードファイルのリスト。
テンプレートプロジェクトに使用するテンプレート。これにより、ビルドプロセスの出力がアプリケーションになるのか、ライブラリになるのか、プラグインになるのかが決まります。

変数の内容を読み込むには、変数名の前に$$ をつけます。これは、ある変数の内容を別の変数に代入するために使用できる:

TEMP_SOURCES = $$SOURCES

$$ 演算子は、文字列や値のリストを操作する組み込み関数で多用されます。詳しくはqmake Language を参照してください。

空白文字

通常、変数の代入では空白で値を区切ります。空白を含む値を指定するには、値を二重引用符で囲む必要があります:

DEST = "Program Files"

引用符で囲まれたテキストは、変数が保持する値のリストの中で1つの項目として扱われます。同様の方法は、特に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 関数は、他のプロジェクト・ファイルをインクルードするために最もよく使われます:

include(other.pro)

条件付き構造のサポートは、プログラミング言語のif ステートメントのように動作するスコープによって利用できます:

win32 {
    SOURCES += paintwidget_win.cpp
}

中括弧の中の代入は、条件が真である場合にのみ行われます。この場合、win32 CONFIGオプションを設定する必要があります。これはWindowsでは自動的に行われる。中括弧は、条件と同じ行に置かなければならない。

通常ループを必要とするような、より複雑な変数操作は、find()unique()count()などの組み込み関数で提供されます。これらの関数をはじめ、多くの関数が文字列やパスの操作、ユーザー入力のサポート、外部ツールの呼び出しのために提供されています。関数の使用法の詳細については、qmake言語を参照してください。すべての関数の一覧とその説明については、置換関数と テスト関数を参照してください。

プロジェクトテンプレート

TEMPLATE変数を使用して、ビルドするプロジェクトのタイプを定義します。これがプロジェクトファイルで宣言されていない場合、qmake はアプリケーションがビルドされるべきであると仮定し、その目的のために適切な Makefile(または同等のファイル)を生成します。

次の表は、利用可能なプロジェクトの種類を要約し、qmake がそれぞれに対して生成するファイルについて説明しています:

テンプレートqmake 出力
app (デフォルト)アプリケーションをビルドするための Makefile。
libライブラリをビルドするための Makefile。
aux何もビルドしないMakefile。プロジェクトがインタプリタ言語で書かれている場合など、ターゲットを作成するためにコンパイラを起動する必要がない場合に使用します。

注意: このテンプレート・タイプは Makefile ベースのジェネレーターでのみ利用可能です。特に、vcxproj と Xcode ジェネレータでは動作しません。

サブディレクトリSUBDIRS変数を使用して指定されたサブディレクトリのルールを含む Makefile。各サブディレクトリは、それ自身のプロジェクトファイルを含んでいなければなりません。
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

CONFIG 変数にbuild_all オプションを追加すると、プロジェクトをビルドするときにこのルールがデフォルトになります。

注: CONFIG 変数で指定された各オプションは、スコープ条件としても使用できます。組み込みのCONFIG()関数を使うことで、特定の構成オプションがあるかどうかをテストできます。例えば、以下の行は、opengl オプションのみが使用されているかどうかをテストするスコープの条件として、この関数を示している:

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

これにより、releasedebug のビルドで異なるコンフィギュレーションを定義することができます。詳しくはスコープの使い方を参照してください。

以下のオプションは、ビルドするプロジェクトのタイプを定義します。

注: これらのオプションの中には、該当するプラットフォームで使用した場合にのみ有効になるものがあります。

オプション説明
qtプロジェクトは Qt アプリケーションであり、Qt ライブラリに対してリンクする必要があります。QT 変数を使用して、アプリケーションに必要な追加の Qt モジュールを制御できます。この値はデフォルトで追加されていますが、Qt以外のプロジェクトにqmakeを使用する場合は削除してください。
x11プロジェクトが X11 アプリケーションまたはライブラリである。ターゲットが Qt を使用している場合、この値は必要ありません。

アプリケーションとライブラリのプロジェクトテンプレートには、ビルドプロセスを微調整するための、より特殊な設定オプションが用意されています。オプションの詳細については、Building Common Project Types を参照してください。

例えば、アプリケーションが Qt ライブラリを使用し、debug モードでビルドする場合、プロジェクトファイルには以下の行が含まれます:

CONFIG += qt debug

注意: "="ではなく、"+="を使用しなければなりません。さもないと、qmakeはQtの設定を使用して、プロジェクトに必要な設定を決定することができません。

Qtライブラリの宣言

CONFIG変数にqt の値が含まれている場合、qmakeのQtアプリケーションのサポートが有効になります。これにより、アプリケーションで使用する Qt モジュールを細かく設定できるようになります。これは、QT変数を使用して、必要な拡張モジュールを宣言することで実現できます。例えば、XMLモジュールとネットワークモジュールは、次のようにして有効にすることができます:

QT += network xml

注: QT にはcoregui モジュールがデフォルトで含まれているため、上記の宣言ではネットワークと XML モジュールをこのデフォルトのリストに追加しています。以下の割り当てではデフォルトのモジュールが省略されるため、アプリケーションのソース・コードをコンパイルするときにエラーが発生します:

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

gui モジュールなしでプロジェクトをビルドしたい場合は、"-="演算子で除外する必要があります。デフォルトでは、QTcoregui の両方を含んでいるので、以下の行は最小限の Qt プロジェクトをビルドすることになります:

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

QT 変数に追加できる Qt モジュールのリストについては、QT.

設定機能

qmakeは、feature(.prf)ファイルで指定された追加設定機能を設定することができます。これらの追加機能は、多くの場合、ビルドプロセス中に使用されるカスタムツールのサポートを提供します。ビルドプロセスに機能を追加するには、CONFIG 変数に機能名(機能ファイル名の語幹)を追加します。

例えば、qmake は以下の行で、D-Bus や ogg ライブラリなど、pkg-config がサポートする外部ライブラリを利用するようにビルドプロセスを設定できます:

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

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。