📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
 
(同じ利用者による、間の32版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
==== 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>
== ユーザ定義の変数 ==
<code>qmake</code>コマンドの実行時において、変数に値を代入する。<br>
VAR = foobar
<br>
<code>qmake</code>コマンドの実行時において、変数の値を参照する。<br>
$$VAR
または
$${VAR}  (周囲のテキストと区別するために囲む)
<br>
<code>make</code>コマンド(<code>qmake</code>コマンドではない)の実行時において、環境変数の値を参照する。<br>
$(VAR)
<br>
<code>qmake</code>コマンドの実行時において、環境変数の値を参照する。<br>
$$(VAR)
<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プロジェクトに追加される。
|-
| style="width: 15%;text-align: center;" | largefile
| style="width: 85%;" | ラージファイルをサポートする。<br><u>Linuxプラットフォームでのみ有効である。</u>
|-
| style="width: 15%;text-align: center;" | separate_debug_info
| style="width: 85%;" | ライブラリのデバッグ情報を個別のファイルに格納する。<br><u>Linuxプラットフォームでのみ有効である。</u>
|}
</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>
<br><br>


26行目: 519行目:
*: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
*: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
*: デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CFLAGS_DEBUGと変数QMAKE_CFLAGS_RELEASEを変更することで調整できる。
*: デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CFLAGS_DEBUGと変数QMAKE_CFLAGS_RELEASEを変更することで調整できる。
*: <br>
*: 例えば、C11、C17、C20の規格を使用する場合は、<code>QMAKE_CFLAGS += -std=c11</code>や<code>QMAKE_CFLAGS += -std=c17</code>と記述する。
<br>
<br>
* QMAKE_CFLAGS_DEBUG
* QMAKE_CFLAGS_DEBUG
39行目: 534行目:
*: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
*: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
*: デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CXXFLAGS_DEBUGと変数QMAKE_CXXFLAGS_RELEASEを変更することで調整できる。
*: デバッグモードとリリースモードの固有のフラグは、それぞれ変数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>
<br>
* QMAKE_CXXFLAGS_DEBUG
* QMAKE_CXXFLAGS_DEBUG
52行目: 549行目:
*: 環境変数PATHに含まれるパス上にある場合、リンカファイルのファイル名のみを指定することができる。
*: 環境変数PATHに含まれるパス上にある場合、リンカファイルのファイル名のみを指定することができる。
*: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
*: この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
<br>
<u>※注意</u><br>
<u>C++20を使用する場合、<code>CONFIG</code>オプションに<code>c++20</code>を指定して、かつ、<code>QMAKE_CXXFLAGS</code>オプションに<code>-fno-sized-deallocation</code>を指定する必要がある。</u><br>
<syntaxhighlight lang="make">
CONFIG += c++20
QMAKE_CXXFLAGS += -std=c++20 -fno-sized-deallocation
</syntaxhighlight>
<br><br>
== pkg-configツールの使用 ==
Qtのプロジェクトファイルにおいて、変数<code>PKGCONFIG</code>を設定することにより、pkg-configツールを使用して外部ライブラリの情報を取得することができる。<br>
これにより、ビルド時にpkg-configツールが使用されて、指定した外部ライブラリの情報を取得することができる。<br>
<br>
<u>まず、pkg-configツールを実行して、ライブラリファイルの存在を確認することが重要である。</u><br>
pkg-config --libs --cflags <ライブラリ名>
<br>
==== 推奨される記述 ====
<syntaxhighlight lang="make">
# PKGCONFIG変数の設定
# Pkg-configを使用する
CONFIG += link_pkgconfig
# 単一のライブラリを指定する場合
PKGCONFIG += <ライブラリ名>
# 例: Systemdライブラリを使用する場合
PKGCONFIG += libsystemd
# 複数のライブラリを指定する場合 :
# PKGCONFIG += <ライブラリ名 1> <ライブラリ名 2> <ライブラリ名 3> ...
</syntaxhighlight>
<br>
変数<code>PKGCONFIG</code>は、pkg-configツールを使用してライブラリの情報を取得するためのものであるため、ライブラリのフルパスを指定することは一般的ではない。<br>
pkg-configツールは、ライブラリの場所やヘッダファイルの場所等を提供するため、フルパスを指定する必要はない。<br>
<br>
もし、ライブラリが一般的の場所にインストールされていない場合や特別な状況でフルパスを指定する場合は、変数<code>LIBS</code>、変数<code>INCLUDEPATH</code>にフルパスを指定する。<br>
<u>ただし、特別な理由がない限り (例えば、非標準のライブラリ配置等)、Pkg-configの情報のみを使用することを推奨する。</u><br>
<br>
==== 非推奨の記述 ====
また、以下に示すような記述は非推奨である。<br>
<syntaxhighlight lang="make">
# 非推奨の記述方法
# Systemdライブラリを使用する場合
PKGCONFIG += libsystemd
LIBS      += -L/usr/lib64 -lsystemd
</syntaxhighlight>
<br>
この記述は冗長であり、潜在的な問題を引き起こす可能性がある。<br>
* 重複したリンク指定
*: Pkg-configを使用することにより、既に必要なリンク情報を提供しており、ライブラリの場所とリンクするライブラリ名が含まれている。
*: そのため、変数PKGCONFIGにライブラリ名を指定する必要はない。
*: <br>
* バージョン不一致のリスク
*: 変数LIBSにおいて、明示的にパスとライブラリを指定する場合、Pkg-configが提供する情報と矛盾する可能性がある。
*: これにより、異なるバージョンのライブラリがリンクされる、または、互換性の問題が発生する可能性がある。
*: <br>
* 移植性の低下
*: ハードコードされたパス (/usr/lib64等) は、異なるシステムや環境では正しくない可能性がある。
*: Pkg-configを使用するメリットの1つは、システム間の違いを抽象化できることである。
<br>
==== カスタムディレクトリを指定する場合 ====
非標準のライブラリ配置、例えば任意のディレクトリにライブラリをインストールしている場合、Pkg-configの設定と直接のライブラリパス指定を組み合わせる必要がある。<br>
<br>
以下の例では、$HOMEディレクトリにインストールされたSystemdライブラリを使用している。<br>
この場合、該当するディレクトリにライブラリのpcファイルが存在するかどうかを確認すること。<br>
<syntaxhighlight lang="make">
# 環境変数$HOMEの値を取得
HOME = $$(HOME)
# Pkg-configのパスを設定
# カスタムのPpkg-config設定を指定して、該当ディレクトリにある.pcファイルを検索するようPkg-configに指示する
QMAKE_PKG_CONFIG = PKG_CONFIG_PATH=$$HOME/lib/pkgconfig pkg-config
# Pkg-configを使用
# pkg-configを使用してlibsystemdの設定を取得する
CONFIG += link_pkgconfig
PKGCONFIG += libsystemd
# インクルードパスを追加
# コンパイラにカスタムインクルードディレクトリを追加する
INCLUDEPATH += $$HOME/include
# リンカにカスタムライブラリパスとリンクするライブラリを指定する
LIBS += -L$$HOME/lib -lsystemd
</syntaxhighlight>
<br><br>
<br><br>


== インクルードの設定 ==
== インクルードの設定 ==
* INCLUDEPATH
* INCLUDEPATH
*: プロジェクトのコンパイル時に検索するインクルードディレクトリを指定する。
*: プロジェクトに必要な追加のインクルードディレクトリのリストである。
*: プロジェクトのコンパイル時に検索するインクルードディレクトリ(<code>#include <ヘッダファイル></code>)を指定する。
*: <br>
*: 例 :
*: 例 :
*: <code>INCLUDEPATH += /home/user/include</code>
*: <code>INCLUDEPATH += /home/user/include</code>
63行目: 651行目:
*: UNIX系OSの場合  <code>INCLUDEPATH += "/home/user/extra headers"</code>
*: UNIX系OSの場合  <code>INCLUDEPATH += "/home/user/extra headers"</code>
*: Windowsの場合  <code>INCLUDEPATH += "C:/myincludes/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>
<br>
* QMAKE_INCDIR
* QMAKE_INCDIR
150行目: 743行目:
|}
|}
</center>
</center>
<br><br>
== プラットフォーム識別子 ==
Qtにはmkspecsディレクトリがあり、サポートする全ての環境の固有情報がデータベースになっている。<br>
* aix
* android
* blackberry
* bsd
* cygwin
* darwin
* freebsd
* hpux
* hurd
* ios
* irix
* linux
* lynxos
* mac
* macx
* maemo
* mingw
* netbsd
* openbsd
* osx
* posix
* qnx
* sco
* solaris
* tru64
* unix
* unixware
* win32
* wince
* winphone
* winrt
<br><br>
<br><br>


291行目: 919行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]