MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの設定 - qmakeのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの設定 - qmake
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == ==== qmakeとは ==== qmakeは、異なるプラットフォーム間での開発プロジェクトのビルドプロセスを簡略化して、ソフトウェア、ライブラリ、その他コンポーネントのビルドプロセスを管理する。<br> 各Qtプロジェクトファイルの情報を元にMakefileの生成を自動化して、各Makefileを作成するために必要な情報を簡便にすることができる。<br> <br> また、Qtで記述されているかどうかに関わらず、あらゆるソフトウェアプロジェクトに使用することができる。<br> また、qmakeには、Qtライブラリを使用した開発を支援するための機能があり、mocやuicのビルドルールも含まれる。<br> <br> 開発者がQtプロジェクトファイルを変更することなく、Visual Studio向けのプロジェクトを生成することも可能である。<br> <br> ==== Qtプロジェクトの記述 ==== qmakeは、Qtプロジェクトファイル内の情報を使用して、各Qtプロジェクトをビルドするために必要な全てのコマンドを含むMakefileを生成する。<br> Qtプロジェクトファイルには、ソースファイル、ヘッダファイル、設定情報、ソフトウェア固有の詳細情報(リンクするライブラリの追加リストや使用するインクルードパスの追加リスト)が含まれる。<br> <br> Qtプロジェクトファイルには、コメント、変数宣言、組み込み関数、簡単な制御構造等、様々な要素を含めることができる。<br> <br> 実行ファイルプロジェクトまたはライブラリプロジェクトのテンプレートを使用して、ビルドプロセスを調整するための設定オプションを指定することもできる。<br> 詳細を知りたい場合は、「プロジェクトタイプのビルド」を参照すること。<br> <br> また、qmakeを使用してQtプロジェクトファイルを生成することもできる。<br> qmakeのコマンドラインオプションの詳細を知りたい場合は、「qmakeの実行」を参照すること。<br> <br> qmakeの設定で、多くのクロスプラットフォームプロジェクトを扱うことができる。<br> ただし、プラットフォーム固有の変数を使用することが必要な場合がある。<br> 詳細を知りたい場合は、「プラットフォーム」を参照すること。<br> <br> ==== Qtプロジェクトのビルド ==== 多くのプロジェクトでは、Qtプロジェクトのトップレベルディレクトリにおいて、<code>qmake</code>コマンドを実行するだけでよい。<br> その後、<code>make</code>コマンドを実行することにより、Makefileに従ってプロジェクトをビルドすることができる。<br> <br> qmakeがビルドプロセスを設定する時に使用する環境変数の詳細については、「qmakeの設定」を参照すること。<br> <br> ==== サードパーティ製ライブラリの使用 ==== サードパーティ製ライブラリの詳細は、「サードパーティ製ライブラリを使用する」を参照すること。<br> <br> ==== ヘッダファイルのプリコンパイル ==== 大規模なプロジェクトでは、プリコンパイルされたヘッダファイルを使用することにより、ビルドプロセスを高速化することが可能である。<br> 詳細を知りたい場合は、「プリコンパイルされたヘッダファイルの使用」を参照すること。<br> <br><br> == Qtプロジェクトファイルの基本的な変数 == ==== CONFIG ==== 変数<code>CONFIG</code>は、Qtプロジェクトの設定とコンパイラのオプションを指定する。<br> 変数<code>CONFIG</code>の値は、qmakeが内部で認識して、特別な意味を持つ。<br> <br> ===== コンパイラとリンカの設定 ===== 下表に、コンパイラとリンカのフラグを制御する変数<code>CONFIG</code>で使用できる値を示す。<br> <center> {| class="wikitable" | style="background-color:#fefefe;" |- ! style="background-color:#66CCFF;" | 変数CONFIGに指定できるオプション ! style="background-color:#66CCFF;" | 説明 |- | release || Qtプロジェクトをリリースモードでビルドする。<br><code>debug</code>も指定した場合は、最後に指定されたものが有効になる。 |- | debug || Qtプロジェクトをデバッグモードでビルドする。 |- | debug_and_release || デバッグモードとリリースモードの両方でビルドする。 |- | debug_and_release_target || この値はデフォルトで設定されている。<br>もし、<code>debug_and_release</code>も同時に指定している場合、デバッグとリリースのビルドは別々のdebugとreleaseディレクトリに出力される。 |- | build_all || <code>debug_and_release</code>も同時に指定している場合、デフォルトでデバッグとリリースの両方のモードでビルドされる。 |- | autogen_precompile_source || Qtプロジェクトファイルで指定したプリコンパイルされたヘッダファイルを含む.cppファイルを自動的に生成する。 |- | ordered || 変数<code>SUBDIRS</code>を使用する場合、<code>ordered</code>オプションはリストされたディレクトリが与えられた順番で処理するように指定する。<br><br><u>※注意</u><br><u><code>ordered</code>オプションの使用は非推奨である。</u><br><u>代わりに、変数<code>SUBDIRS</code>を使用して、依存関係を指定する。</u> |- | precompile_header || プリコンパイルされたヘッダファイルを使用する。 |- | precompile_header_c<br>(Visual C++のみのオプション) || C言語のプリコンパイルされたヘッダファイルを使用する。 |- | warn_on || コンパイラはできるだけ多くの警告を出力する。<br><code>warn_off</code>オプションも同時に指定した場合は、最後に指定したものが有効になる。 |- | warn_off || コンパイラは警告をできるだけ出力しない。 |- | exceptions || デフォルトで有効に設定されている。<br>例外サポートが有効になる。 |- | exceptions_off || 例外サポートを無効にする。 |- | ltcg || デフォルトで無効に設定されている。<br>リンクタイムコード生成を有効にする。 |- | rtti || 未指定の場合は、コンパイラのデフォルトが使用される。<br>RTTIサポートを有効にする。 |- | rtti_off || 未指定の場合は、コンパイラのデフォルトが使用される。<br>RTTIサポートを無効にする。 |- | stl || 未指定の場合は、コンパイラのデフォルトが使用される。<br>STLサポートを有効にする。 |- | stl_off || 未指定の場合は、コンパイラのデフォルトが使用される。<br>STLサポートを無効にする。 |- | thread || スレッドサポートを有効にする。<br>変数<code>CONFIG</code>に<code>qt</code>が含まれている場合は、デフォルトで有効に設定されている。 |- | no_utf8_source || QtプロジェクトのソースファイルにUTF-8エンコーディングを使用せずに、コンパイラのデフォルトの設定を使用する。 |- | hide_symbols || 未指定の場合は、コンパイラのデフォルトが使用される。<br>バイナリ内のシンボルのデフォルトの可視性を非表示に設定する。 |- | depend_includepath || デフォルトで有効に設定されている。<br>変数<code>INCLUDEPATH</code>の値を変数<code>DEPENDPATH</code>に付加することを有効にする。 |- | lrelease || 変数<code>TRANSLATIONS</code>と変数<code>EXTRA_TRANSLATIONS</code>にリストされている全てのファイルに対して、<code>lrelease</code>コマンド(翻訳)を実行する。<br>変数<code>QMAKE_LRELEASE_FLAGS</code>に<code>lrelease</code>コマンドのオプションを記述する。<br><br><code>embed_translations</code>オプションが未指定の場合、生成されたQMファイルを変数<code>QM_FILES_INSTALL_PATH</code>にインストールする。 |- | embed_translations || 変数<code>QM_FILES_RESOURCE_PREFIX</code>で指定したディレクトリに、<code>lrelease</code>コマンドの実行により生成された翻訳ファイルを実行ファイルに埋め込む。<br><code>lrelease</code>オプションも設定する必要がある。 |- | create_libtool || 現在ビルドされているライブラリのlibtool(.la拡張子)ファイルを作成する。 |- | create_pc || 現在ビルドされているライブラリのpkg-config(.pc拡張子)ファイルを作成する。 |- | no_batch || NMakeを使用する場合のみ有効である。<br>NMakeのバッチルールや推論ルールの生成を無効にする。 |- | dont_recurse || 現在のサブプロジェクトのqmake再帰を抑制する。 |- | no_include_pwd || カレントディレクトリを変数<code>INCLUDEPATHS</code>に追加しない。 |- | compile_included_sources || <code>qmake</code>コマンドは、他のソースコードファイルにインクルードされているソースファイルをコンパイルする。<br><u>デフォルトでは、このオプションは有効である。</u> |- | skip_target_version_ext || Windowsにおいて、DLLファイル名に自動付加されるバージョンナンバーを抑制する。 |- | suppress_vcproj_warnings || Visual Studioプロジェクトジェネレータの警告を抑制する。 |- | windeployqt || リンク後、自動的にwindeployqtを起動して、出力をデプロイメントアイテムとして追加する。 |- | strict_c || C言語のコンパイラ拡張のサポートを無効にする。<br><u>デフォルトでは、このオプションは有効である。</u> |- | strict_c++ || C++言語のコンパイラ拡張のサポートを無効にする。<br><u>デフォルトでは、このオプションは有効である。</u> |} </center> <br> ===== Qtプロジェクトの設定 ===== 変数<code>CONFIG</code>は、Qtプロジェクトの機能を指定することもできる。<br> <br> Qtプロジェクトは、デバッグモード、リリースモード、デバッグモードとリリースモードの同時でビルドすることができる。<br> <code>debug</code>オプションと<code>release</code>オプションを別々に両方を指定する場合、最後に指定されたものが有効になる。<br> <br> <code>debug_and_release</code>オプションを指定する場合、<code>qmake</code>コマンドが生成するMakefileには、両方のオプションをビルドするルールが含まれる。<br> これは次のようにして呼び出すことができます。 make all # debug_and_releaseオプションを指定して、デバッグモードとリリースモードの同時でビルドする場合 <br> 変数<code>CONFIG</code>に<code>build_all</code>オプションを記述する場合、プロジェクトをビルドする時はこのルールがデフォルトになる。<br> <br> ※注意<br> 変数<code>CONFIG</code>で指定された各オプションは、スコープ条件として使用することも可能である。<br> また、組み込みの<code>CONFIG()</code>関数を使用して、特定の構成オプションが存在するかどうかを確認することもできる。<br> 組み込みの<code>CONFIG()</code>関数の詳細を知りたい場合は、[https://doc.qt.io/qt-5/qmake-test-function-reference.html#config-config Qtの公式Webサイト]を参照すること。<br> 以下の例では、<code>opengl</code>オプションが指定されているかどうかを確認している。<br> CONFIG(opengl) { message(Building with OpenGL support.) } else { message(OpenGL support is not available.) } <br> 詳細を知りたい場合は、[https://doc.qt.io/qt-5/qmake-language.html#scopes Qtの公式Webサイトにあるスコープの使用]を参照すること。<br> <br> 下表に、Qtプロジェクトの種類を定義するオプションを示す。<br> (これらのオプションの中には、関連するプラットフォームで使用した場合にのみ有効になるものがあることに注意する)<br> <center> {| class="wikitable" | style="background-color:#fefefe;" |- ! style="background-color:#66CCFF;" | オプション ! style="background-color:#66CCFF;" | 説明 |- | style="width: 15%;text-align: center;" | qt | style="width: 85%;" | Qtソフトウェアを示すオプションである。<br>Qtライブラリに対してリンクする必要があることを示す。<br><br>また、変数<code>QT</code>を使用して、必要な追加のQtライブラリを指定することができるようになる。<br><br><u><code>qt</code>オプションはデフォルトで追加されている、Qtプロジェクト以外で<code>qmake</code>コマンドを実行する場合は削除すること。</u> |- | style="width: 15%;text-align: center;" | x11 | style="width: 85%;" | X11ソフトウェアまたはX11ライブラリであることを指定する。<br>Qtプロジェクトの場合、この値は不要である。 |- | style="width: 15%;text-align: center;" | console | style="width: 85%;" | ターゲットは、コンソールソフトウェアである。<br>適切なインクルードパス、コンパイラフラグ、ライブラリは自動的にプロジェクトに追加される。<br><br>クロスプラットフォーム向けの場合は、<code>cmdline</code>オプションを指定することを推奨する。 |- | style="width: 15%;text-align: center;" | cmdline | style="width: 85%;" | ターゲットは、クロスプラットフォーム向けのコマンドラインソフトウェアである。<br>Windowsでは<code>CONFIG += console</code>、MacOSの場合は<code>CONFIG -= app_bundle</code>を意味する。 |- | style="width: 15%;text-align: center;" | shared<br>dll | style="width: 85%;" | ターゲットは共有オブジェクト(.soまたは.dll)である。<br>ターゲットプラットフォーム用の適切な接尾辞(.soまたは.dll)を持つ共有ライブラリファイルが作成される。<br>適切なインクルードパス、コンパイラフラグ、ライブラリが自動的にQtプロジェクトに追加される。<br><br><u><code>dll</code>オプションは全てのプラットフォームで使用できることに注意する。</u> |- | style="width: 15%;text-align: center;" | static<br>staticlib | style="width: 85%;" | ターゲットはスタティックライブラリ(.aまたは.lib)である。<br>適切なコンパイラフラグは、自動的にQtプロジェクトに追加される。 |- | style="width: 15%;text-align: center;" | plugin | style="width: 85%;" | ターゲットはプラグイン(.aまたは.lib)である。<br>これにより、<code>dll</code>オプションも有効になる。 |- | style="width: 15%;text-align: center;" | metatypes | style="width: 85%;" | Qtプロジェクトに"<name>_metatypes.json"ファイルを作成する。<br><name>は、変数<code>TARGET</code>のベースネーム(全て小文字)である。 |- | style="width: 15%;text-align: center;" | qmltypes | style="width: 85%;" | <code>qmltypes</code>オプションは、<code>metatypes</code>オプションを意味する。<br>C++で定義されたQMLの型を自動的に登録する。<br><br>また、Qtプロジェクトに"<template>.qmltypes"ファイルを作成する。<br><template>は、<code>plugin</code>オプションが設定されている場合は<code>plugins</code>、設定されていない場合は変数<code>TEMPLATE</code>の値になる。<br><br>C++からQMLの型を定義する方法の詳細は、[https://doc.qt.io/qt-5/qtqml-cppintegration-overview.html#defining-qml-types-from-c Qtの公式ドキュメント]を参照すること。 |- | style="width: 15%;text-align: center;" | designer | style="width: 85%;" | ターゲットは、Qt Designerのプラグインである。 |- | style="width: 15%;text-align: center;" | no_lflags_merge | style="width: 85%;" | 変数<code>LIBS</code>に格納されたライブラリのリストが、使用される前に一意の値のリストに還元されないことを保証する。 |- | style="width: 15%;text-align: center;" | testcase | style="width: 85%;" | ターゲットは自動テストである。<br>テストを実行するため、生成されたMakefileにチェックターゲットが追加される。<br>Makefileを生成する時にのみ関連するオプションである。 |- | style="width: 15%;text-align: center;" | insignificant_test | style="width: 85%;" | 自動テストの終了コードを無視するオプションである。<br>このオプションは、<code>testcase</code>オプションも設定されている場合にのみ有効である。 |- | style="width: 15%;text-align: center;" | windows | style="width: 85%;" | ターゲットは、Windowsソフトウェア(実行ファイルのみ)である。<br>適切なインクルードパス、コンパイラフラグ、ライブラリは自動的にQtプロジェクトに追加される。 |} </center> <br> 例えば、ソフトウェアがQtライブラリを使用しており、かつ、デバッグモードでビルドする場合、Qtプロジェクトファイルには、以下に示すオプションが含まれる。<br> CONFIG += qt debug <br> ==== QT ==== Qtプロジェクトで使用されるQtライブラリを指定する変数である。<br> Qtライブラリを指定することにより、そのヘッダファイルをインクルードできるようになり、バイナリにリンクされる。<br> <br> 変数<code>CONFIG</code>に<code>qt</code>オプションを指定している場合、<code>qmake</code>コマンドのQtソフトウェアに対するサポートが有効になる。<br> これにより、Qtソフトウェアで使用されるQtライブラリを細かく調整することが可能になる。<br> <br> 以下の例では、Qt XMLライブラリとQtネットワークライブラリを有効にしている。<br> QT += network xml <br> <u>※注意</u><br> <u>QtのGUIソフトウェアでは、変数<code>QT</code>は、デフォルトで<code>core</code>オプションと<code>gui</code>オプションを含む。</u><br> <br> Qtプロジェクトをコンソールソフトウェアとして構築する場合、<code>-=</code>演算子で除外する必要がある。<br> 以下の例では、最小限のQtプロジェクトがビルドされる結果となります。 QT -= gui # Qt Coreライブラリのみを使用する場合 <br> 下表に、変数<code>QT</code>に追加できるQtライブラリの一部を示す。<br> 詳細を知りたい場合は、Qtの公式ドキュメントを参照すること。<br> * Qt 5.15(LTS) *: https://doc.qt.io/qt-5/qtmodules.html * Qt 6.2(LTS) *: https://doc.qt.io/qt-6.2/qtmodules.html <center> {| class="wikitable" | style="background-color:#fefefe;" |- ! style="background-color:#66CCFF;width: 15%;" | オプション ! style="background-color:#66CCFF;width: 20%;" | ライブラリ ! style="background-color:#66CCFF;width: 65%;" | 説明 |- | style="text-align: center;" | core | style="text-align: center;" | Qt Core || 他のQtライブラリで使用される非グラフィカルなコアクラス。 |- | style="text-align: center;" | gui | style="text-align: center;" | Qt GUI || グラフィカルユーザインターフェイス(GUI)コンポーネントの基本クラス。<br>OpenGLを含む。 |- | style="text-align: center;" | widgets | style="text-align: center;" | Qt Widgets || Qt GUIをC++ウィジェットで拡張するためのクラス。 |- | style="text-align: center;" | dbus | style="text-align: center;" | Qt D-Bus || D-Busプロトコルでプロセス間通信を行うためのクラス。 |- | style="text-align: center;" | multimedia | style="text-align: center;" | Qt Multimedia || オーディオ、ビデオ、ラジオ、カメラ機能のためのクラス。 |- | style="text-align: center;" | multimediawidgets | style="text-align: center;" | Qt Multimedia Widgets || マルチメディア機能を実装するためのウィジェットベースのクラス。 |- | style="text-align: center;" | network | style="text-align: center;" | Qt Network || ネットワークプログラミングを簡単かつポータブルにするためのクラス。 |- | style="text-align: center;" | qml | style="text-align: center;" | Qt QML || QML言語とJavaScript言語のためのクラス。 |- | style="text-align: center;" | quick | style="text-align: center;" | Qt Quick || カスタムユーザインタフェースを持つ高度で動的なアプリケーションを構築するための宣言型フレームワーク。 |- | style="text-align: center;" | quickcontrols2 | style="text-align: center;" | Qt Quick Controls || デスクトップ、組み込み、モバイルデバイス用の高性能なユーザインターフェースを作成するための軽量なQML型を提供する。 |- | style="text-align: center;" | quickcontrols2 | style="text-align: center;" | Qt Quick Dialogs || Qt Quickソフトウェアからシステムダイアログを作成して、対話するためのアイテム。 |- | style="text-align: center;" | quickcontrols2 | style="text-align: center;" | Qt Quick Layouts || Qt Quick 2ベースのアイテムをユーザインターフェイスに配置するために使用するアイテム。 |- | style="text-align: center;" | QMLテストケースの場合<br>CONFIG += qmltestcase<br><br>C++のみのテストプロジェクトの場合<br>QT += qmltest | style="text-align: center;" | Qt Quick Test || QMLソフトウェアのためのユニットテストフレームワークであり、テストケースはJavaScriptの関数として記述される。<br><br><u>※注意</u><br><u>Qt Quick Testには、バイナリ互換性保証は適用されない。</u><br><u>しかし、ソースとの互換性は保たれる。<u> |- | style="text-align: center;" | concurrent | style="text-align: center;" | Qt Concurrent || 低レベルのスレッドプリミティブを使用せずにマルチスレッドプログラムを記述するためのクラス。 |- | style="text-align: center;" | sql | style="text-align: center;" | Qt SQL || SQLを使ったデータベース統合のためのクラス。 |- | style="text-align: center;" | svg | style="text-align: center;" | Qt SVG || SVGファイルを表示するためのクラス。<br>SVG 1.2 Tiny標準のサブセットをサポートする。<br><br>Qt Widgetを使用する場合は、SVGファイルをレンダリングするためのサポートを提供する。 |- | style="text-align: center;" | xml | style="text-align: center;" | Qt XML || DOM(Document Object Model)APIでXMLを扱う。 |- | style="text-align: center;" | bluetooth | style="text-align: center;" | Qt Bluetooth || Bluetoothハードウェアへのアクセスを提供する。 |- | style="text-align: center;" | testlib | style="text-align: center;" | Qt Test || QtソフトウェアやQtライブラリをユニットテストするためのクラス。<br><br><u>※注意</u><br><u>Qt Testには、バイナリ互換性保証は適用されない。</u><br><u>しかし、ソースとの互換性は保たれる。<u> |} </center> <br> ==== TEMPLATE ==== Qtプロジェクトファイルは、原則として、1ファイル1ターゲットである。<br> 変数<code>TEMPLATE</code>は、Qtプロジェクトの種類を指定する。<br> <br> * app *: ソフトウェア * lib *: ライブラリまたはプラグイン *: <br> *: <u>※注意</u> *: <u>プラグインの場合は、<code>CONFIG += plugin</code>も設定すること。</u> *: <u>Qt Designerプラグインの場合は、併せて、<code>QT += uiplugin</code>も設定すること。</u> * subdir *: サブディレクトリ * aux *: Makefileを使用してもビルドしない。 *: 例えば、プロジェクトがインタプリタ言語で書かれているため、ターゲットを作成するためにコンパイラを起動する必要がない場合に使用することがある。 *: <br> *: <u>※注意</u> *: <u>auxは、Makefileベースのジェネレータでのみ使用可能である。</u> *: <u>vcxprojとXcodeジェネレータでは動作しない。</u> * vcapp *: ソフトウェアをビルドするためのVisual Studioプロジェクトファイルである。 * vclib *: ライブラリをビルドするためのVisual Studioプロジェクトファイルである。 * vcsubdirs *: サブディレクトリでプロジェクトをビルドするためのVisual Studioソリューションファイルである。 <br> 変数<code>TEMPLATE</code>に<code>subdirs</code>を使用する場合、<code>qmake</code>コマンドは指定された各サブディレクトリを検索して、各Qtプロジェクトファイルを処理する。<br> <code>make</code>コマンドを実行するため、各プラットフォーム上でMakefileを生成する。<br> <br> 変数<code>SUBDIRS</code>は、処理する各Qtプロジェクトファイルのディレクトリを格納するために使用される。<br> <br> ==== TARGET ==== ターゲットファイルの名前を指定する。<br> 未指定の場合は、Qtプロジェクトファイルのベースネームが使用される。<br> # 以下の例では、UnixではMySoftware、WindowsではMySoftware.exeという名前の実行ファイルを生成する TARGET = MySoftware <br> ==== SOURCES ==== 変数<code>SOURCES</code>は、Qtプロジェクトに含まれる全てのソースコードファイルの名前を指定する。<br> 例. SOURCES += main.cpp \ mainwindow.cpp <br> ==== HEADERS ==== 変数<code>HEADERS</code>は、Qtプロジェクトのヘッダファイルの名前を指定する。<br> <br> qmakeは、ヘッダファイルに定義しているクラスがmocを必要とするかどうかを自動的に検出した後、<br> mocが必要な場合はmocファイルを生成して、リンクするために適切な依存関係とファイルをQtプロジェクトに追加する。<br> HEADERS += main.h \ mainwindow.h <br> ==== LEXSOURCES ==== ソフトウェアのLexソースコードファイルのリストを指定する。<br> lexファイルをビルドするため、全ての依存関係、ソースコードファイル、ヘッダファイルが自動的にプロジェクトに追加される。<br> LEXSOURCES = lexer.l <br> ==== YACCSOURCES ==== プロジェクトに含めるYaccソースコードファイルのリストを指定する。<br> 全ての依存関係、ソースコードファイル、ヘッダファイルが自動的にプロジェクトに追加される。<br> YACCSOURCES = moc.y <br> ==== FORMS ==== コンパイルを行う前にuicで処理するUIファイルを指定する。<br> UIファイルをビルドするために必要な全ての依存関係、ヘッダファイル、ソースコードファイルは自動的にプロジェクトに追加される。<br> FORMS += mainwindow.ui \ subwindow.ui <br> ==== RESOURCES ==== Qtプロジェクトのリソースコレクションファイル(qrc)の名前を指定する。<br> リソースコレクションファイルの詳細を知りたい場合は、[https://doc.qt.io/qt-5/resources.html Qt Resource System]を参照すること。<br> <br> ==== SUBDIRS ==== subdirsテンプレートと同時に使用する場合、ビルドする必要のあるQtプロジェクトの一部を含む全てのサブディレクトリまたはQtプロジェクトファイルの名前を指定する。<br> この変数で指定した各サブディレクトリは、それ自身のQtプロジェクトファイルを含んでいる必要がある。<br> <br> 各サブディレクトリ内のQtプロジェクトファイルは、サブディレクトリ自身と同じベースネームを持つ場合、ファイル名を省略することができる。<br> (例えば、サブディレクトリがMySoftwareという名前の場合、そのディレクトリのQtプロジェクトファイルはMySoftware.proという名前の場合)<br> <br> また、任意のディレクトリにあるQtプロジェクトファイルへの相対パスを指定することもできる。<br> ただし、現在のプロジェクトの親ディレクトリとそのサブディレクトリにあるパスだけを指定することを推奨する。<br> <br> <u>依存関係が無い場合では、全てのビルドは変数<code>SUBDIRS</code>に記述した順番(上から順次)に行われる。</u><br> SUBDIRS = MyTool \ MySoftware <br> 各サブディレクトリを特定の順序で構築する必要がある場合、関連する変数<code>SUBDIRS</code>の要素に<code>.depends</code>修飾子を使用する。<br> <br> 以下の例では、MyLibraryがMySoftwareの前にビルドされて、MySoftwareがMyTestの前にビルドされることを保証している。<br> MyDocumentは、他のサブディレクトリと並行してビルドすることができるため、ビルドプロセスを高速化することができる。<br> SUBDIRS += MySoftware \ MyLibrary \ MyTest \ MyDocument MySoftware.depends = MyLibrary MyTest.depends = MySoftware <br> 複数の依存関係を指定することもでき、それらは全て依存するターゲットの前にビルドされる。<br> <br> <u>※注意</u><br> <u>変数<code>CONFIG</code>に<code>ordered</code>オプションを使用することは非推奨である。</u><br> <u>これは、マルチコアのビルドを遅くする可能性がある。</u><br> <br> ビルド順を定義する以外に、変数<code>SUBDIRS</code>に追加の修飾子を付加することにより、変数<code>SUBDIRS</code>のデフォルトの動作を変更することが可能である。<br> 下表に、サポートされている修飾子を示す。<br> <center> {| class="wikitable" | style="background-color:#fefefe;" |+ 変数<code>SUBDIRS</code>に指定できる修飾子 |- ! style="background-color:#66CCFF;" | 修飾子 ! style="background-color:#66CCFF;" | 説明 |- | .subdir || 変数<code>SUBDIRS</code>の値の代わりに、指定されたサブディレクトリを使用する。 |- | .file || サブプロジェクトプロファイルを明示的に指定する。<br>この時、<code>.subdir</code>修飾子と同時に使用できない。 |- | .depends || このサブプロジェクトは指定されたサブプロジェクトに依存することを示す。(複数可) |- | .makefile || サブプロジェクトのMakefileを指定する。<br>Makefileを使用するプラットフォームでのみ利用可能である。 |- | .target || このサブプロジェクトに関連するMakefileターゲットに使用されるベース文字列を指定する。<br>Makefileを使用するプラットフォームでのみ利用可能である。 |} </center> <br> 以下の例では、2つのサブディレクトリを定義して、各サブディレクトリが変数<code>SUBDIRS</code>で指定したディレクトリとは異なるディレクトリに存在しており、<br> サブディレクトリの1つが他のものより先に構築されなければならないとする。<br> (例では、MySoftwareはappディレクトリ、MyLibraryはlibディレクトリに存在する) SUBDIRS += MySoftware \ MyLibrary MySoftware.subdir = app MySoftware.depends = MyLibrary MyLibrary.subdir = lib <br> ==== DESTDIR ==== 生成したターゲットファイルの生成先を指定する。<br> <u>変数<code>DESTDIR</code>は、インストールディレクトリではなく、ビルドした結果のバイナリファイルが配置される場所である。</u><br> <br> ==== DEFINES ==== ビルド時に追加されるプロプロセッサ(<code>#define</code>で定義される)を格納する。<br> <br> ==== DEPENDPATH ==== 依存関係を解決するため、<code>qmake</code>コマンドが検索するディレクトリのリストを指定する。<br> ソースコードにインクルード(<code>#include</code>)したヘッダファイルを、<code>qmake</code>コマンドがクロールする時に使用される。<br> <br> 変数<code>INCLUDEPATH</code>では、変更される可能性の低い外部ライブラリのヘッダファイルまで検索する場合は時間が掛かる。<br> そのため、外部ライブラリのヘッダファイルを使用する場合は、変数<code>DEPENDPATH</code>を使用した方がよい。<br> <br> ==== VPATH ==== <code>qmake</code>コマンドが開くことができないファイルのパスを指定する。<br> <br> 例えば、<code>qmake</code>コマンドが変数<code>SOURCES</code>を検索している時、開くことができないエントリを見つけた場合、<br> 変数<code>VPATH</code>のリスト全体を検索して、自分自身でそのファイルを見つけることができるかどうかを確認する。<br> <br> ==== DEF_FILE ==== 変数<code>TEMPLATE</code>で<code>app</code>を指定、かつ、Windowsの場合のみ使用できる変数である。<br> ソフトウェアにリンクされる.defファイルを指定する。<br> <br> ==== VERSION ==== 変数<code>TEMPLATE</code>に<code>app</code>が指定されている場合はソフトウェアのバージョン番号、<br> 変数<code>TEMPLATE</code>に<code>lib</code>が指定されている場合はライブラリのバージョン番号を指定する。<br> 例. win32:VERSION = 1.2.3.4 # <メジャー番号>.<マイナー番号>.<パッチ番号>.<ビルド番号> else:VERSION = 1.2.3 # <メジャー番号>.<マイナー番号>.<パッチ番号> <br> Windowsでは、変数<code>RC_FILE</code>と変数<code>RES_FILE</code>が設定されていない場合、.rcファイルの自動生成をトリガする。<br> 生成される.rcファイルには、FILEVERSION項目とPRODUCTVERSION項目にメジャー、マイナー、パッチレベル、ビルド番号が記入される。<br> 各番号は0から65535までの範囲である必要がある。<br> <br><br> == コンパイラの設定 == GCCやG++コンパイラ等を標準以外に変更する場合、プロジェクトファイル(.pro拡張子)に以下の設定を追記する。<br> <br> * QMAKE_CC *: C言語のソースコードを含むプロジェクトをビルドする時に使用されるC言語のコンパイラを指定する。 *: <code>QMAKE_CC = /<GCCのインストールディレクトリ>/bin/gcc-10.2</code> *: また、環境変数PATHにGCCやG++等のパスを設定している場合、以下のように、コンパイラのファイル名だけで指定することができる。 *: <code>QMAKE_CC = gcc-10.2</code> *: <br> *: <code>QMAKE_CC</code>オプションは、<code>CONFIG</code>オプションよりも上に記述する。 <br> * QMAKE_CXX *: C++言語のソースコードを含むプロジェクトをビルドする時に使用されるC++言語のコンパイラを指定する。 *: <code>QMAKE_CXX = /<GCCのインストールディレクトリ>/bin/g++-10.2</code> *: また、環境変数PATHにGCCやG++等のパスを設定している場合、コンパイラのファイル名だけで指定することができる。 *: <code>QMAKE_CXX = g++-10.2</code> *: <br> *: <code>QMAKE_CXX</code>オプションは、<code>CONFIG</code>オプションよりも上に記述する。 <br> * QMAKE_CFLAGS *: プロジェクトをビルドするためのC言語のコンパイラフラグを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 *: デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CFLAGS_DEBUGと変数QMAKE_CFLAGS_RELEASEを変更することで調整できる。 *: <br> *: 例えば、C11、C17、C20の規格を使用する場合は、<code>QMAKE_CFLAGS += -std=c11</code>や<code>QMAKE_CFLAGS += -std=c17</code>と記述する。 <br> * QMAKE_CFLAGS_DEBUG *: デバッグビルドのC言語のコンパイラフラグを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br> * QMAKE_CFLAGS_RELEASE *: リリースビルドのC言語のコンパイラフラグを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br> * QMAKE_CXXFLAGS *: プロジェクトをビルドするためのC++のコンパイラフラグを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 *: デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CXXFLAGS_DEBUGと変数QMAKE_CXXFLAGS_RELEASEを変更することで調整できる。 *: <br> *: 例えば、C++14、C++17、C++20の規格を使用する場合は、<code>QMAKE_CXXFLAGS += -std=c++14</code>や<code>QMAKE_CXXFLAGS += -std=c++17</code>と記述する。 <br> * QMAKE_CXXFLAGS_DEBUG *: デバッグビルドのC++のコンパイラフラグを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br> * QMAKE_CXXFLAGS_RELEASE *: リリースビルドのC++のコンパイラフラグを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br> * QMAKE_LINK *: アプリケーションベースのプロジェクトを構築する時に使用するリンカを指定する。 *: 環境変数PATHに含まれるパス上にある場合、リンカファイルのファイル名のみを指定することができる。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br><br> == インクルードの設定 == * INCLUDEPATH *: プロジェクトに必要な追加のインクルードディレクトリのリストである。 *: プロジェクトのコンパイル時に検索するインクルードディレクトリ(<code>#include <ヘッダファイル></code>)を指定する。 *: <br> *: 例 : *: <code>INCLUDEPATH += /home/user/include</code> *: <br> *: スペースを含むパスを指定するには、以下のように記述する。 *: UNIX系OSの場合 <code>INCLUDEPATH += "/home/user/extra headers"</code> *: Windowsの場合 <code>INCLUDEPATH += "C:/myincludes/extra headers"</code> <br> * DEPENDPATH *: ソフトウェアまたはライブラリの依存関係を解決するため、<code>qmake</code>コマンドがスキャンするインクルードディレクトリパスのリストを指定する。 *: DEPENDPATHは、ソースコードに<code>#include</code>で指定したヘッダファイルにおいて、<code>qmake</code>コマンドがクロールする時に使用される。 *: 特に、<code>Q_OBJECT</code>からのmocファイルの依存関係を解決するために、DEPENDPATHが必要となる。 <br> * QMAKE_INCDIR *: INCLUDEPATHに追加されるシステムヘッダのパスのリストを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br><br> == ライブラリの設定 == * LIBS *: プロジェクトにリンクするライブラリのリストを指定する。 *: UNIX系OSにおいて、<code>-l</code>(ライブラリ)フラグと<code>-L</code>(ライブラリパス)フラグを使用する場合、 *: qmakeはWindowsでライブラリを正しく処理する。(ライブラリのフルパスをリンカに渡す) *: <code>-l</code>で指定されているディレクトリを見つけるには、ライブラリが存在している必要があります。 *: 例 : *: UNIX系OSの場合 <code>LIBS += -L/usr/local/lib -lmath</code> *: Windowsの場合 <code>LIBS += c:/mylibs/math.lib</code> *: <br> *: また、スペースを含むパスを指定するには、以下のように記述する。 *: UNIX系OSの場合 <code>LIBS += "-L/usr/local lib/lib" -lmath</code> *: Windowsの場合 <code>LIBS += "C:/mylibs lib/math.lib"</code> *: <br> *: 標準では、LIBSに格納されているライブラリのリストは、使用される前に一意の名前のリストに縮小される。 *: この動作を変更するには、変数CONFIGに<code>no_lflags_merge</code>オプションを追加する。 *: <code>CONFIG += no_lflags_merge</code> <br> * LIBS_PRIVATE *: プロジェクトにプライベートリンクするライブラリのリストを指定する。 *: この変数の動作はLIBSと同じであるが、UNIX用の共有ライブラリプロジェクトがリンクインターフェイスで、これらの依存関係を公開しない点が異なる。 *: <br> *: 例えば、あるプロジェクトがライブラリA(ライブラリAは、ライブラリBにプライベートに依存)に依存している場合、 *: プロジェクトからもライブラリBを直接使用する場合、ライブラリBに明示的にリンクする必要があるということである。 *: 言い換えると、プライベートにリンクされたライブラリは、ビルド時に推移的に公開されない。 <br> * QMAKE_LIBDIR *: 全てのプロジェクトのライブラリ検索パスのリストを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 *: プロジェクトファイルで追加のライブラリ検索パスを指定するには、LIBSを使用する。 *: <code>LIBS += -L/path/to/libraries</code> <br> * QMAKE_LIBDIR_POST *: 全てのプロジェクトのシステムライブラリ検索パスのリストを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br> * QMAKE_LIBDIR_FLAGS *: この変数は、UNIX系OSでのみ使用される。 *: 接頭辞<code>-L</code>が付いた全てのライブラリディレクトリの場所を指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 <br> * QMAKE_LIBS *: 各プロジェクトがリンクする必要のある追加のライブラリを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 *: プロジェクトファイルでライブラリを指定するには、LIBSを使用する。 <br> * QMAKE_LIBS_PRIVATE *: 各プロジェクトがリンクする必要のある追加のプライベートライブラリを指定する。 *: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。 *: プロジェクトファイルでプライベートライブラリを指定するには、LIBS_PRIVATEを使用する。 <br><br> == インストールの設定 == * INSTALLS *: make installコマンドまたは同様のインストール手順が実行される場合、インストールされるリソースのリストを指定する。 *: リスト内の各項目は、インストールされる場所に関する情報を提供する属性を指定する。 *: この変数は、組み込みデバイスに展開される追加ファイルを指定するためにも使用される。 *: <br> *: 例えば、変数target.pathは、ビルドターゲットがインストールされる場所を示し、 *: 変数INSTALLSは、インストールされる既存のリソースのリストにビルドターゲットを追加する。 *: <code>target.path += $$[QT_INSTALL_PLUGINS]/imageformats</code> *: <code>INSTALLS += target</code> *: <br> *: 下表に、変数INSTALLSにおけるいくつかの値を記載する。 <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#00ffff;" | 値 ! style="background-color:#00ffff;" | 説明 |- | no_check_exist || この値が設定されていない場合、qmakeはインストールするファイルが実際に存在するかどうかを確認する。<br>これらのファイルが存在しない場合、qmakeはインストールルールを作成しない。<br>qdocによって作成されたHTMLファイル等、ビルドプロセスの一部として生成されたファイルをインストールする必要がある場合は、<br>この値を使用する。 |- | nostrip || この値が設定されている場合、UNIXのストリップ機能はオフになり、デバッグ情報はバイナリに残る。 |- | executable || この値が設定されている場合、UNIX系OSでは、実行可能フラグが設定される。 |- | no_build || make installコマンドを実行した時、まだプロジェクトのビルドが無い場合、プロジェクトをビルドされた後にインストールされる。<br>この動作を望まない場合は、この値を設定して、ビルドターゲットがインストールターゲットへの依存関係として追加されないようにする。 |- | no_default_install || プロジェクトにトップレベルのプロジェクトターゲットが存在する場合、make installコマンドを実行すると、全てがインストールされる。<br>ただし、この値が設定されたインストールターゲットがある場合、標準ではインストールされない。<br>明示的に、<code>make install_<file></code>コマンドを実行する必要がある。 |} </center> <br><br> == qDebug関数の出力を抑止する == 標準の設定では、リリースビルドでも<code>qDebug</code>関数の出力が有効になっている。<br> リリースビルドで<code>qDebug</code>関数で出力しないように設定するには、プロジェクトファイル(.pro)に以下を追記する。<br> CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT <br> <code>qInfo</code>関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。<br> CONFIG(release, debug|release):DEFINES += QT_NO_INFO_OUTPUT <br> <code>qWarning</code>関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。<br> CONFIG(release, debug|release):DEFINES += QT_NO_WARNING_OUTPUT <br> <code>qCritical</code>関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。<br> CONFIG(release, debug|release):DEFINES += QT_NO_CRITICAL_OUTPUT <br> <code>qFatal</code>関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。<br> CONFIG(release, debug|release):DEFINES += QT_NO_FATAL_OUTPUT <br><br> == デプロイ時のディレクトリの変更 == デプロイ時において、DebugモードとReleaseモードのディレクトリを変更する時、.proファイルに以下の設定を記述する。<br> 以下の設定により、デプロイ時のDebugディレクトリ名は、"プロジェクト名 + d"となる。<br> TARGET_NAME = $${TARGET} if(debug) { TARGET_NAME = $${TARGET}d } <br><br> == インストール時のディレクトリの変更 == <code>qmake</code>コマンド実行時のインストールディレクトリは、<code>target</code>パラメータで指定する。<br> <br> 以下の例では、.proファイルに変数PREFIXを定義して、標準のインストールディレクトリを/usr/localディレクトリとしており、<br> <code>qmake</code>コマンド実行時にPREFIXオプションを使用した場合は、その該当ディレクトリをインストールディレクトリとしている。<br> <syntaxhighlight lang="bash"> # ...略 isEmpty(PREFIX) { PREFIX = /usr/local } #target = Software_Name target.path = $${PREFIX}/ INSTALLS += target # ...略 </syntaxhighlight> <br> 上記の設定を記述した後、<code>qmake</code>コマンドにPREFIXオプションを付加して実行する。<br> qmake ./<Qtプロジェクト>.pro PREFIX=$HOME/InstallSoftware/Software_Name <br><br> == DEFINESマクロ == ==== 応用 : qmakeコマンド実行時にコンパイルするファイルを変更する ==== 以下の例では、qmakeコマンドの実行時において、<code>MACHINE=pinephone</code>オプションを付加することで、QMLファイルを動的に変更することができる。<br> qmake ./〜.pro MACHINE=pinephone <br> # .proファイル # ...略 isEqual(MACHINE, pinephone) { DEFINES += "PINEPHONE" \ } # ...略 <br> <syntaxhighlight lang="c++"> // 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 // ...略 } </syntaxhighlight> <br><br> == messageマクロ == <code>qmake</code>コマンド実行時において、ターミナルにメッセージを出力する場合は、<code>message</code>マクロを使用する。<br> message(<メッセージ内容>) # 例1. "Build Start"と表示する message(Build Start) # 例2. 変数DESTDIRの内容を出力する message(DESTDIR: ($$DESTDIR)) <br><br> == 最適化ビルド == 以下の設定を、qmake時のオプションに指定する、または、.proファイルに追記する。<br> これで、最適化フラグが<code>-O2</code>から<code>-O3</code>に置き換わる。<br> <syntaxhighlight lang="cmake"> CONFIG += optimize_full </syntaxhighlight> <br> 以下の設定は、リリースビルドのみに適用する。<br> <syntaxhighlight lang="cmake"> CONFIG(release, debug|release) { CONFIG += optimize_full } </syntaxhighlight> <br><br> == バージョン情報 == QMakeを使用してビルドされた実行ファイルまたはライブラリに対して、自動的にバージョンを付加することができる。<br> <br> 以下の例では、SVNを使用して現在のバージョンを取得している。(プロジェクトのバージョンを返すコマンドで代用すること)<br> <br> まず、.proファイルに以下の設定を追記する。<br> VERSION = $$system(svn info -r HEAD . | grep 'Changed\ Rev' | cut -b 19-) !isEmpty(VERSION){ VERSION = 0.$${VERSION} } <br> 次に、ソフトウェアのバージョンを設定する。<br> <syntaxhighlight lang="make"> VERSTR = '\"$${VERSION}\'' # バージョンの文字列を引用符で囲む DEFINES += VER=\"$$${VERSTR}\" # バージョン文字列を含むVERマクロの作成 </syntaxhighlight> <br> 上記の設定により、VERマクロを任意のcppファイル / ヘッダファイルで使用することにより、引用符で囲まれたバージョンを取得することができる。<br> <syntaxhighlight lang="c++"> #include <iostream> int main() { std::cout << "VERSION: " << VER << std::endl; return 0; } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの設定 - qmake
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse