Qtの設定 - qmake

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2022年12月8日 (木) 17:45時点におけるWiki (トーク | 投稿記録)による版 (→‎TEMPLATE)
ナビゲーションに移動 検索に移動

概要

qmakeとは

qmakeは、異なるプラットフォーム間での開発プロジェクトのビルドプロセスを簡略化して、ソフトウェア、ライブラリ、その他コンポーネントのビルドプロセスを管理する。
各Qtプロジェクトファイルの情報を元にMakefileの生成を自動化して、各Makefileを作成するために必要な情報を簡便にすることができる。

また、Qtで記述されているかどうかに関わらず、あらゆるソフトウェアプロジェクトに使用することができる。
また、qmakeには、Qtライブラリを使用した開発を支援するための機能があり、mocやuicのビルドルールも含まれる。

開発者がQtプロジェクトファイルを変更することなく、Visual Studio向けのプロジェクトを生成することも可能である。

Qtプロジェクトの記述

qmakeは、Qtプロジェクトファイル内の情報を使用して、各Qtプロジェクトをビルドするために必要な全てのコマンドを含むMakefileを生成する。
Qtプロジェクトファイルには、ソースファイル、ヘッダファイル、設定情報、ソフトウェア固有の詳細情報(リンクするライブラリの追加リストや使用するインクルードパスの追加リスト)が含まれる。

Qtプロジェクトファイルには、コメント、変数宣言、組み込み関数、簡単な制御構造等、様々な要素を含めることができる。

実行ファイルプロジェクトまたはライブラリプロジェクトのテンプレートを使用して、ビルドプロセスを調整するための設定オプションを指定することもできる。
詳細を知りたい場合は、「プロジェクトタイプのビルド」を参照すること。

また、qmakeを使用してQtプロジェクトファイルを生成することもできる。
qmakeのコマンドラインオプションの詳細を知りたい場合は、「qmakeの実行」を参照すること。

qmakeの設定で、多くのクロスプラットフォームプロジェクトを扱うことができる。
ただし、プラットフォーム固有の変数を使用することが必要な場合がある。
詳細を知りたい場合は、「プラットフォーム」を参照すること。

Qtプロジェクトのビルド

多くのプロジェクトでは、Qtプロジェクトのトップレベルディレクトリにおいて、qmakeコマンドを実行するだけでよい。
その後、makeコマンドを実行することにより、Makefileに従ってプロジェクトをビルドすることができる。

qmakeがビルドプロセスを設定する時に使用する環境変数の詳細については、「qmakeの設定」を参照すること。

サードパーティ製ライブラリの使用

サードパーティ製ライブラリの詳細は、「サードパーティ製ライブラリを使用する」を参照すること。

ヘッダファイルのプリコンパイル

大規模なプロジェクトでは、プリコンパイルされたヘッダファイルを使用することにより、ビルドプロセスを高速化することが可能である。
詳細を知りたい場合は、「プリコンパイルされたヘッダファイルの使用」を参照すること。


Qtプロジェクトファイルの基本的な変数

CONFIG

変数CONFIGは、Qtプロジェクトの設定とコンパイラのオプションを指定する。
変数CONFIGの値は、qmakeが内部で認識して、特別な意味を持つ。

下表に、コンパイラとリンカのフラグを制御する変数CONFIGで使用できる値を示す。

変数CONFIGに指定できるオプション 説明
release Qtプロジェクトをリリースモードでビルドする。
debugも指定した場合は、最後に指定されたものが有効になる。
debug Qtプロジェクトをデバッグモードでビルドする。
debug_and_release デバッグモードとリリースモードの両方でビルドする。
debug_and_release_target この値はデフォルトで設定されている。
もし、debug_and_releaseも同時に指定している場合、デバッグとリリースのビルドは別々のdebugとreleaseディレクトリに出力される。
build_all debug_and_releaseも同時に指定している場合、デフォルトでデバッグとリリースの両方のモードでビルドされる。
autogen_precompile_source Qtプロジェクトファイルで指定したプリコンパイルされたヘッダファイルを含む.cppファイルを自動的に生成する。
ordered 変数SUBDIRSを使用する場合、orderedオプションはリストされたディレクトリが与えられた順番で処理するように指定する。

※注意
orderedオプションの使用は非推奨である。
代わりに、変数SUBDIRSを使用して、依存関係を指定する。
precompile_header プリコンパイルされたヘッダファイルを使用する。
precompile_header_c
(Visual C++のみのオプション)
C言語のプリコンパイルされたヘッダファイルを使用する。
warn_on コンパイラはできるだけ多くの警告を出力する。
warn_offオプションも同時に指定した場合は、最後に指定したものが有効になる。
warn_off コンパイラは警告をできるだけ出力しない。
exceptions デフォルトで有効に設定されている。
例外サポートが有効になる。
exceptions_off 例外サポートを無効にする。
ltcg デフォルトで無効に設定されている。
リンクタイムコード生成を有効にする。
rtti 未指定の場合は、コンパイラのデフォルトが使用される。
RTTIサポートを有効にする。
rtti_off 未指定の場合は、コンパイラのデフォルトが使用される。
RTTIサポートを無効にする。
stl 未指定の場合は、コンパイラのデフォルトが使用される。
STLサポートを有効にする。
stl_off 未指定の場合は、コンパイラのデフォルトが使用される。
STLサポートを無効にする。
thread スレッドサポートを有効にする。
変数CONFIGqtが含まれている場合は、デフォルトで有効に設定されている。
no_utf8_source QtプロジェクトのソースファイルにUTF-8エンコーディングを使用せずに、コンパイラのデフォルトの設定を使用する。
hide_symbols 未指定の場合は、コンパイラのデフォルトが使用される。
バイナリ内のシンボルのデフォルトの可視性を非表示に設定する。
depend_includepath デフォルトで有効に設定されている。
変数INCLUDEPATHの値を変数DEPENDPATHに付加することを有効にする。
lrelease 変数TRANSLATIONSと変数EXTRA_TRANSLATIONSにリストされている全てのファイルに対して、lreleaseコマンド(翻訳)を実行する。
変数QMAKE_LRELEASE_FLAGSlreleaseコマンドのオプションを記述する。

embed_translationsオプションが未指定の場合、生成されたQMファイルを変数QM_FILES_INSTALL_PATHにインストールする。
embed_translations 変数QM_FILES_RESOURCE_PREFIXで指定したディレクトリに、lreleaseコマンドの実行により生成された翻訳ファイルを実行ファイルに埋め込む。
lreleaseオプションも設定する必要がある。


TEMPLATE

Qtプロジェクトファイルは、原則として、1ファイル1ターゲットである。
変数TEMPLATEは、Qtプロジェクトの種類を指定する。

  • app
    ソフトウェア
  • lib
    ライブラリ
  • subdir
    サブディレクトリ
  • aux
    Makefileを使用してもビルドしない。
    例えば、プロジェクトがインタプリタ言語で書かれているため、ターゲットを作成するためにコンパイラを起動する必要がない場合に使用することがある。

    ※注意
    auxは、Makefileベースのジェネレータでのみ使用可能である。
    特に、vcxprojとXcodeジェネレータでは動作しない。
  • vcapp
    ソフトウェアをビルドするためのVisual Studioプロジェクトファイルである。
  • vclib
    ライブラリをビルドするためのVisual Studioプロジェクトファイルである。
  • vcsubdirs
    サブディレクトリでプロジェクトをビルドするためのVisual Studioソリューションファイルである。


変数TEMPLATEsubdirsを使用する場合、qmakeコマンドは指定された各サブディレクトリを検索して、各Qtプロジェクトファイルを処理する。
makeコマンドを実行するため、各プラットフォーム上でMakefileを生成する。

変数SUBDIRSは、処理する各Qtプロジェクトファイルのディレクトリを格納するために使用される。

TARGET

ターゲットファイルの名前を指定する。
未指定の場合は、Qtプロジェクトファイルのベースネームが使用される。

# 以下の例では、UnixではMySoftware、WindowsではMySoftware.exeという名前の実行ファイルを生成する
TARGET = MySoftware


SOURCES

変数SOURCESは、Qtプロジェクトに含まれる全てのソースコードファイルの名前を指定する。

例.
SOURCES += main.cpp \
           mainwindow.cpp


HEADERS

変数HEADERSは、Qtプロジェクトのヘッダファイルの名前を指定する。

qmakeは、ヘッダファイルに定義しているクラスがmocを必要とするかどうかを自動的に検出した後、
mocが必要な場合はmocファイルを生成して、リンクするために適切な依存関係とファイルをQtプロジェクトに追加する。

HEADERS += main.h \
           mainwindow.h


FORMS

コンパイルを行う前にuicで処理するUIファイルを指定する。
UIファイルをビルドするために必要な全ての依存関係、ヘッダファイル、ソースコードファイルは自動的にプロジェクトに追加される。

FORMS += mainwindow.ui \
         subwindow.ui


RESOURCES

Qtプロジェクトのリソースコレクションファイル(qrc)の名前を指定する。
リソースコレクションファイルの詳細を知りたい場合は、Qt Resource Systemを参照すること。

SUBDIRS

subdirsテンプレートと同時に使用する場合、ビルドする必要のあるQtプロジェクトの一部を含む全てのサブディレクトリまたはQtプロジェクトファイルの名前を指定する。
この変数で指定した各サブディレクトリは、それ自身のQtプロジェクトファイルを含んでいる必要がある。

各サブディレクトリ内のQtプロジェクトファイルは、サブディレクトリ自身と同じベースネームを持つ場合、ファイル名を省略することができる。
(例えば、サブディレクトリがMySoftwareという名前の場合、そのディレクトリのQtプロジェクトファイルはMySoftware.proという名前の場合)

また、任意のディレクトリにあるQtプロジェクトファイルへの相対パスを指定することもできる。
ただし、現在のプロジェクトの親ディレクトリとそのサブディレクトリにあるパスだけを指定することを推奨する。

依存関係が無い場合では、全てのビルドは変数SUBDIRSに記述した順番(上から順次)に行われる。

SUBDIRS = MyTool \
          MySoftware


各サブディレクトリを特定の順序で構築する必要がある場合、関連する変数SUBDIRSの要素に.depends修飾子を使用する。

以下の例では、MyLibraryがMySoftwareの前にビルドされて、MySoftwareがMyTestの前にビルドされることを保証している。
MyDocumentは、他のサブディレクトリと並行してビルドすることができるため、ビルドプロセスを高速化することができる。

SUBDIRS += MySoftware \
           MyLibrary \
           MyTest \
           MyDocument

MySoftware.depends = MyLibrary
MyTest.depends     = MySoftware


複数の依存関係を指定することもでき、それらは全て依存するターゲットの前にビルドされる。

※注意
変数CONFIGorderedオプションを使用することは非推奨である。
これは、マルチコアのビルドを遅くする可能性がある。

ビルド順を定義する以外に、変数SUBDIRSに追加の修飾子を付加することにより、変数SUBDIRSのデフォルトの動作を変更することが可能である。
下表に、サポートされている修飾子を示す。

変数SUBDIRSに指定できる修飾子
修飾子 説明
.subdir 変数SUBDIRSの値の代わりに、指定されたサブディレクトリを使用する。
.file サブプロジェクトプロファイルを明示的に指定する。
この時、.subdir修飾子と同時に使用できない。
.depends このサブプロジェクトは指定されたサブプロジェクトに依存することを示す。(複数可)
.makefile サブプロジェクトのMakefileを指定する。
Makefileを使用するプラットフォームでのみ利用可能である。
.target このサブプロジェクトに関連するMakefileターゲットに使用されるベース文字列を指定する。
Makefileを使用するプラットフォームでのみ利用可能である。


以下の例では、2つのサブディレクトリを定義して、各サブディレクトリが変数SUBDIRSで指定したディレクトリとは異なるディレクトリに存在しており、
サブディレクトリの1つが他のものより先に構築されなければならないとする。
(例では、MySoftwareはappディレクトリ、MyLibraryはlibディレクトリに存在する)

SUBDIRS += MySoftware \
           MyLibrary

MySoftware.subdir = app
MySoftware.depends = MyLibrary
MyLibrary.subdir = lib


DESTDIR

生成したターゲットファイルの生成先を指定する。
変数DESTDIRは、インストールディレクトリではなく、ビルドした結果のバイナリファイルが配置される場所である。

DEFINES

ビルド時に追加されるプロプロセッサ(#defineで定義される)を格納する。

DEPENDPATH

依存関係を解決するため、qmakeコマンドが検索するディレクトリのリストを指定する。
ソースコードにインクルード(#include)したヘッダファイルを、qmakeコマンドがクロールする時に使用される。

変数INCLUDEPATHでは、変更される可能性の低い外部ライブラリのヘッダファイルまで検索する場合は時間が掛かる。
そのため、外部ライブラリのヘッダファイルを使用する場合は、変数DEPENDPATHを使用した方がよい。

VPATH

qmakeコマンドが開くことができないファイルのパスを指定する。

例えば、qmakeコマンドが変数SOURCESを検索している時、開くことができないエントリを見つけた場合、
変数VPATHのリスト全体を検索して、自分自身でそのファイルを見つけることができるかどうかを確認する。

VERSION

変数TEMPLATEappが指定されている場合はソフトウェアのバージョン番号、
変数TEMPLATElibが指定されている場合はライブラリのバージョン番号を指定する。

例.
win32:VERSION = 1.2.3.4  # <メジャー番号>.<マイナー番号>.<パッチ番号>.<ビルド番号>
else:VERSION = 1.2.3     # <メジャー番号>.<マイナー番号>.<パッチ番号>


Windowsでは、変数RC_FILEと変数RES_FILEが設定されていない場合、.rcファイルの自動生成をトリガする。
生成される.rcファイルには、FILEVERSION項目とPRODUCTVERSION項目にメジャー、マイナー、パッチレベル、ビルド番号が記入される。
各番号は0から65535までの範囲である必要がある。


コンパイラの設定

GCCやG++コンパイラ等を標準以外に変更する場合、プロジェクトファイル(.pro拡張子)に以下の設定を追記する。

  • QMAKE_CC
    C言語のソースコードを含むプロジェクトをビルドする時に使用されるC言語のコンパイラを指定する。
    QMAKE_CC = /<GCCのインストールディレクトリ>/bin/gcc-10.2
    また、環境変数PATHにGCCやG++等のパスを設定している場合、以下のように、コンパイラのファイル名だけで指定することができる。
    QMAKE_CC = gcc-10.2

    QMAKE_CCオプションは、CONFIGオプションよりも上に記述する。


  • QMAKE_CXX
    C++言語のソースコードを含むプロジェクトをビルドする時に使用されるC++言語のコンパイラを指定する。
    QMAKE_CXX = /<GCCのインストールディレクトリ>/bin/g++-10.2
    また、環境変数PATHにGCCやG++等のパスを設定している場合、コンパイラのファイル名だけで指定することができる。
    QMAKE_CXX = g++-10.2

    QMAKE_CXXオプションは、CONFIGオプションよりも上に記述する。


  • QMAKE_CFLAGS
    プロジェクトをビルドするためのC言語のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CFLAGS_DEBUGと変数QMAKE_CFLAGS_RELEASEを変更することで調整できる。

    例えば、C11、C17、C20の規格を使用する場合は、QMAKE_CFLAGS += -std=c11QMAKE_CFLAGS += -std=c17と記述する。


  • QMAKE_CFLAGS_DEBUG
    デバッグビルドのC言語のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_CFLAGS_RELEASE
    リリースビルドのC言語のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_CXXFLAGS
    プロジェクトをビルドするためのC++のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CXXFLAGS_DEBUGと変数QMAKE_CXXFLAGS_RELEASEを変更することで調整できる。

    例えば、C++14、C++17、C++20の規格を使用する場合は、QMAKE_CXXFLAGS += -std=c++14QMAKE_CXXFLAGS += -std=c++17と記述する。


  • QMAKE_CXXFLAGS_DEBUG
    デバッグビルドのC++のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_CXXFLAGS_RELEASE
    リリースビルドのC++のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_LINK
    アプリケーションベースのプロジェクトを構築する時に使用するリンカを指定する。
    環境変数PATHに含まれるパス上にある場合、リンカファイルのファイル名のみを指定することができる。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。



インクルードの設定

  • INCLUDEPATH
    プロジェクトに必要な追加のインクルードディレクトリのリストである。
    プロジェクトのコンパイル時に検索するインクルードディレクトリ(#include <ヘッダファイル>)を指定する。

    例 :
    INCLUDEPATH += /home/user/include

    スペースを含むパスを指定するには、以下のように記述する。
    UNIX系OSの場合 INCLUDEPATH += "/home/user/extra headers"
    Windowsの場合 INCLUDEPATH += "C:/myincludes/extra headers"


  • DEPENDPATH
    ソフトウェアまたはライブラリの依存関係を解決するため、qmakeコマンドがスキャンするインクルードディレクトリパスのリストを指定する。
    DEPENDPATHは、ソースコードに#includeで指定したヘッダファイルにおいて、qmakeコマンドがクロールする時に使用される。
    特に、Q_OBJECTからのmocファイルの依存関係を解決するために、DEPENDPATHが必要となる。


  • QMAKE_INCDIR
    INCLUDEPATHに追加されるシステムヘッダのパスのリストを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。



ライブラリの設定

  • LIBS
    プロジェクトにリンクするライブラリのリストを指定する。
    UNIX系OSにおいて、-l(ライブラリ)フラグと-L(ライブラリパス)フラグを使用する場合、
    qmakeはWindowsでライブラリを正しく処理する。(ライブラリのフルパスをリンカに渡す)
    -lで指定されているディレクトリを見つけるには、ライブラリが存在している必要があります。
    例 :
    UNIX系OSの場合 LIBS += -L/usr/local/lib -lmath
    Windowsの場合 LIBS += c:/mylibs/math.lib

    また、スペースを含むパスを指定するには、以下のように記述する。
    UNIX系OSの場合 LIBS += "-L/usr/local lib/lib" -lmath
    Windowsの場合 LIBS += "C:/mylibs lib/math.lib"

    標準では、LIBSに格納されているライブラリのリストは、使用される前に一意の名前のリストに縮小される。
    この動作を変更するには、変数CONFIGにno_lflags_mergeオプションを追加する。
    CONFIG += no_lflags_merge


  • LIBS_PRIVATE
    プロジェクトにプライベートリンクするライブラリのリストを指定する。
    この変数の動作はLIBSと同じであるが、UNIX用の共有ライブラリプロジェクトがリンクインターフェイスで、これらの依存関係を公開しない点が異なる。

    例えば、あるプロジェクトがライブラリA(ライブラリAは、ライブラリBにプライベートに依存)に依存している場合、
    プロジェクトからもライブラリBを直接使用する場合、ライブラリBに明示的にリンクする必要があるということである。
    言い換えると、プライベートにリンクされたライブラリは、ビルド時に推移的に公開されない。


  • QMAKE_LIBDIR
    全てのプロジェクトのライブラリ検索パスのリストを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    プロジェクトファイルで追加のライブラリ検索パスを指定するには、LIBSを使用する。
    LIBS += -L/path/to/libraries


  • QMAKE_LIBDIR_POST
    全てのプロジェクトのシステムライブラリ検索パスのリストを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_LIBDIR_FLAGS
    この変数は、UNIX系OSでのみ使用される。
    接頭辞-Lが付いた全てのライブラリディレクトリの場所を指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_LIBS
    各プロジェクトがリンクする必要のある追加のライブラリを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    プロジェクトファイルでライブラリを指定するには、LIBSを使用する。


  • QMAKE_LIBS_PRIVATE
    各プロジェクトがリンクする必要のある追加のプライベートライブラリを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    プロジェクトファイルでプライベートライブラリを指定するには、LIBS_PRIVATEを使用する。



インストールの設定

  • INSTALLS
    make installコマンドまたは同様のインストール手順が実行される場合、インストールされるリソースのリストを指定する。
    リスト内の各項目は、インストールされる場所に関する情報を提供する属性を指定する。
    この変数は、組み込みデバイスに展開される追加ファイルを指定するためにも使用される。

    例えば、変数target.pathは、ビルドターゲットがインストールされる場所を示し、
    変数INSTALLSは、インストールされる既存のリソースのリストにビルドターゲットを追加する。
    target.path += $$[QT_INSTALL_PLUGINS]/imageformats
    INSTALLS += target

    下表に、変数INSTALLSにおけるいくつかの値を記載する。
説明
no_check_exist この値が設定されていない場合、qmakeはインストールするファイルが実際に存在するかどうかを確認する。
これらのファイルが存在しない場合、qmakeはインストールルールを作成しない。
qdocによって作成されたHTMLファイル等、ビルドプロセスの一部として生成されたファイルをインストールする必要がある場合は、
この値を使用する。
nostrip この値が設定されている場合、UNIXのストリップ機能はオフになり、デバッグ情報はバイナリに残る。
executable この値が設定されている場合、UNIX系OSでは、実行可能フラグが設定される。
no_build make installコマンドを実行した時、まだプロジェクトのビルドが無い場合、プロジェクトをビルドされた後にインストールされる。
この動作を望まない場合は、この値を設定して、ビルドターゲットがインストールターゲットへの依存関係として追加されないようにする。
no_default_install プロジェクトにトップレベルのプロジェクトターゲットが存在する場合、make installコマンドを実行すると、全てがインストールされる。
ただし、この値が設定されたインストールターゲットがある場合、標準ではインストールされない。
明示的に、make install_<file>コマンドを実行する必要がある。



qDebug関数の出力を抑止する

標準の設定では、リリースビルドでもqDebug関数の出力が有効になっている。
リリースビルドでqDebug関数で出力しないように設定するには、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT


qInfo関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_INFO_OUTPUT


qWarning関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_WARNING_OUTPUT


qCritical関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_CRITICAL_OUTPUT


qFatal関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_FATAL_OUTPUT



デプロイ時のディレクトリの変更

デプロイ時において、DebugモードとReleaseモードのディレクトリを変更する時、.proファイルに以下の設定を記述する。
以下の設定により、デプロイ時のDebugディレクトリ名は、"プロジェクト名 + d"となる。

TARGET_NAME = $${TARGET}
if(debug)
{
    TARGET_NAME = $${TARGET}d
}



インストール時のディレクトリの変更

qmakeコマンド実行時のインストールディレクトリは、targetパラメータで指定する。

以下の例では、.proファイルに変数PREFIXを定義して、標準のインストールディレクトリを/usr/localディレクトリとしており、
qmakeコマンド実行時にPREFIXオプションを使用した場合は、その該当ディレクトリをインストールディレクトリとしている。

 # ...略
 
 isEmpty(PREFIX) {
    PREFIX = /usr/local
 }
 
 #target = Software_Name
 target.path = $${PREFIX}/
 INSTALLS += target
 
 # ...略


上記の設定を記述した後、qmakeコマンドにPREFIXオプションを付加して実行する。

qmake ./<Qtプロジェクト>.pro PREFIX=$HOME/InstallSoftware/Software_Name



DEFINESマクロ

応用 : qmakeコマンド実行時にコンパイルするファイルを変更する

以下の例では、qmakeコマンドの実行時において、MACHINE=pinephoneオプションを付加することで、QMLファイルを動的に変更することができる。

qmake ./〜.pro MACHINE=pinephone


# .proファイル

# ...略
 
isEqual(MACHINE, pinephone) {
   DEFINES += "PINEPHONE" \
}

# ...略


 // main.cppファイル
 
 int main(int argc, char *argv[])
 {
    // ...略
 
 #ifdef PINEPHONE
    const QUrl url(QStringLiteral("qrc:/mainPinePhone.qml"));
 #else
    const QUrl url(QStringLiteral("qrc:/main.qml")); 
 #endif
 
    // ...略
 }



messageマクロ

qmakeコマンド実行時において、ターミナルにメッセージを出力する場合は、messageマクロを使用する。

message(<メッセージ内容>)

# 例1. "Build Start"と表示する
message(Build Start)

# 例2. 変数DESTDIRの内容を出力する
message(DESTDIR: ($$DESTDIR))



最適化ビルド

以下の設定を、qmake時のオプションに指定する、または、.proファイルに追記する。
これで、最適化フラグが-O2から-O3に置き換わる。

 CONFIG += optimize_full


以下の設定は、リリースビルドのみに適用する。

 CONFIG(release, debug|release) {
    CONFIG += optimize_full
 }



バージョン情報

QMakeを使用してビルドされた実行ファイルまたはライブラリに対して、自動的にバージョンを付加することができる。

以下の例では、SVNを使用して現在のバージョンを取得している。(プロジェクトのバージョンを返すコマンドで代用すること)

まず、.proファイルに以下の設定を追記する。

VERSION = $$system(svn info -r HEAD . | grep 'Changed\ Rev' | cut -b 19-)
!isEmpty(VERSION){
   VERSION = 0.$${VERSION}
}


次に、ソフトウェアのバージョンを設定する。

 VERSTR   = '\"$${VERSION}\''    # バージョンの文字列を引用符で囲む
 DEFINES += VER=\"$$${VERSTR}\"  # バージョン文字列を含むVERマクロの作成


上記の設定により、VERマクロを任意のcppファイル / ヘッダファイルで使用することにより、引用符で囲まれたバージョンを取得することができる。

 #include <iostream>
 
 int main()
 {
    std::cout << "VERSION: " << VER << std::endl;
    
    return 0;
 }