qmakeを始める
このチュートリアルでは qmake の基本を学びます。このマニュアルの他のトピックには、qmake の使用に関するより詳細な情報が含まれています。
簡単なことから始める
アプリケーションの基本的な実装が終わったところで、以下のファイルを作成したとします:
- hello.cpp
- hello.cpp
- 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
Note: Qt をパッケージマネージャ経由でインストールした場合、バイナリはqmake6
になります。
次に、使用するコンパイラに応じてmake
またはnmake
と入力してください。
Visual Studioをお使いの方は、qmakeでVisual Studioのプロジェクトファイルを生成することもできます。例えば
qmake -tp vc hello.pro
アプリケーションをデバッグ可能にする
アプリケーションのリリースバージョンには、デバッグシンボルやその他のデバッグ情 報は含まれていません。開発中に、関連する情報を持つアプリケーションのデバッグバージョンを作成することは有用です。これは、プロジェクトファイルのCONFIG変数にdebug
。
例えば
CONFIG += debug HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp
先ほどと同じように qmake を使って Makefile を生成する。これで、デバッグ環境でアプリケーションを実行するときに、 アプリケーションに関する有用な情報が得られるようになります。
プラットフォーム固有のソースファイルの追加
数時間のコーディングの後、あなたはアプリケーションのプラットフォーム固有の部分に着手し、プラットフォーム依存のコードを分離しておくことにしたかもしれません。そこで、hellowin.cpp
とhellounix.cpp
という2つの新しいファイルをプロジェクト・ファイルに追加します。これらのファイルを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 を作成したくないかもしれません。exists()関数を使えば、ファイルが存在するかどうかをチェックできる。error()関数を使えば、qmakeの処理を止めることができる。これはスコープと同じように動作します。スコープの条件を関数に置き換えるだけです。main.cppというファイルのチェックは次のようになります:
!exists( main.cpp ) { error( "No main.cpp file found" ) }
!
という記号は、テストを否定するために使われます。つまり、ファイルが存在すればexists( main.cpp )
、存在しなければ!exists( main.cpp )
。
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()
。出力を見るには、適切なコンソール設定でアプリケーションをビルドする必要があります。WindowsのMakefileにこの設定を含めるには、CONFIG
行にconsole
。しかし、Windows上で実行しているときに、 debug
がすでにCONFIG
行にある場合にのみ、CONFIG
行を追加したいとします。この場合、2つの入れ子になったスコープを使う必要がある。まず1つのスコープを作成し、その中にもう1つのスコープを作成します。このように、2つ目のスコープの中に処理する設定を入れます:
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のチュートリアルが終了し、開発プロジェクト用のプロジェクトファイルを書く準備ができました。
ここに含まれるドキュメントの著作権はそれぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。