📢 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…
 
(同じ利用者による、間の17版が非表示)
37行目: 37行目:
大規模なプロジェクトでは、プリコンパイルされたヘッダファイルを使用することにより、ビルドプロセスを高速化することが可能である。<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>
<br><br>


99行目: 115行目:
|-
|-
| embed_translations || 変数<code>QM_FILES_RESOURCE_PREFIX</code>で指定したディレクトリに、<code>lrelease</code>コマンドの実行により生成された翻訳ファイルを実行ファイルに埋め込む。<br><code>lrelease</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>
</center>
<br>
<br>
===== Qtプロジェクトの設定 =====
===== Qtプロジェクトの設定 =====
変数<code>CONFIG</code>は、Qtプロジェクトの機能を指定することもできる。<br>
変数<code>CONFIG</code>は、Qtプロジェクトの機能を指定することもできる。<br>
137行目: 176行目:
|-
|-
| style="width: 15%;text-align: center;" | qt  
| 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: 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: 15%;text-align: center;" | x11  
| style="width: 85%;" | X11ソフトウェアまたはX11ライブラリであることを指定する。<br>Qtプロジェクトの場合、この値は不要である。
| 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>
</center>
146行目: 227行目:
例えば、ソフトウェアがQtライブラリを使用しており、かつ、デバッグモードでビルドする場合、Qtプロジェクトファイルには、以下に示すオプションが含まれる。<br>
例えば、ソフトウェアがQtライブラリを使用しており、かつ、デバッグモードでビルドする場合、Qtプロジェクトファイルには、以下に示すオプションが含まれる。<br>
  CONFIG += qt debug
  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>
<br>


155行目: 326行目:
*: ソフトウェア
*: ソフトウェア
* lib
* lib
*: ライブラリ
*: ライブラリまたはプラグイン
*: <br>
*: <u>※注意</u>
*: <u>プラグインの場合は、<code>CONFIG += plugin</code>も設定すること。</u>
*: <u>Qt Designerプラグインの場合は、併せて、<code>QT += uiplugin</code>も設定すること。</u>
* subdir
* subdir
*: サブディレクトリ
*: サブディレクトリ
164行目: 339行目:
*: <u>※注意</u>
*: <u>※注意</u>
*: <u>auxは、Makefileベースのジェネレータでのみ使用可能である。</u>
*: <u>auxは、Makefileベースのジェネレータでのみ使用可能である。</u>
*: <u>特に、vcxprojとXcodeジェネレータでは動作しない。</u>
*: <u>vcxprojとXcodeジェネレータでは動作しない。</u>
* vcapp
* vcapp
*: ソフトウェアをビルドするためのVisual Studioプロジェクトファイルである。
*: ソフトウェアをビルドするためのVisual Studioプロジェクトファイルである。
374行目: 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>


479行目: 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>


620行目: 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]]