qt_add_plugin

Qtプラグインターゲットを作成します。

このコマンドはQt6 パッケージのCore コンポーネントで定義されています:

find_package(Qt6 REQUIRED COMPONENTS Core)

このコマンドは Qt 6.0 で導入されました。

概要

qt_add_plugin(target
              [SHARED | STATIC]
              [CLASS_NAME class_name]
              [OUTPUT_TARGETS variable_name]
              [MANUAL_FINALIZATION]
              sources...
)

MANUAL_FINALIZATION オプションとソースを設定する機能は Qt 6.5 で導入されました。

バージョンレスコマンドが無効になっている場合は、代わりにqt6_add_plugin() を使用してください。このコマンドと同じ引数セットをサポートしています。

説明

Qt プラグイン ターゲットには、通常の CMake ライブラリー ターゲット以上の追加要件があります。qt_add_plugin() コマンドは、これらの要件を満たすために必要な処理を追加します。Qtプラグインターゲットを定義する際には、組み込みのCMakeadd_library() コマンドではなく、このコマンドを呼び出す必要があります。

デフォルトでは、Qt が静的にビルドされた場合はSTATIC ライブラリとして、そうでない場合はMODULE ライブラリとしてプラグインが作成されます。このデフォルトを上書きするには、STATIC またはSHARED オプションを指定します。

指定されたsources は、add_library() の内部呼び出しに渡されます。

注意: 非静的プラグインは、ビルド時にリンクされるのではなく、実行時に動的にロードされるものです。CMakeは、動的にロードされるライブラリにはMODULE ライブラリ・タイプを、直接リンクされるライブラリにはSHARED ライブラリ・タイプを提供することで、これら2つのシナリオを区別しています。この区別は、シンボルエクスポートの処理方法のため、ツールチェイン(特にVisual Studio)によっては重要です。MODULE ライブラリにリンクできない場合があり、エクスポートされた シンボルがないSHARED ライブラリを生成すると、ビルド時エラーが発生 する可能性があります。qt_add_plugin()SHARED オプションを渡すと、SHARED ライブラリではなくMODULE ライブラリが作成されます。

すべてのQtプラグインにはクラス名があります。デフォルトでは、これはtarget と同じになりますが、CLASS_NAME オプションで上書きすることができます。クラス名は、プラグインのメタデータを宣言するC++クラスの名前に対応します。静的プラグインの場合、これはQ_IMPORT_PLUGIN に渡される名前でもあります。 はプラグインをアプリケーションにインポートし、実行時に利用できるようにします。

プラグインが静的にビルドされる場合、qt_add_plugin() は追加の内部ターゲットを定義することができる。これにより、プラグインにリンクする実行可能ファイルや共有ライブラリのプラグインの自動インポートが容易になります。プロジェクトがプラグインをインストールし、他のプロジェクトがリンクできるようにする場合、プロジェクトはこれらの内部ターゲットもインストールする必要があります。これらのターゲットの名前は、OUTPUT_TARGETS オプションの後にターゲットリストを返す変数名を指定することで取得できます。

最終処理

ターゲットが作成された後、さらなる処理または最終化ステップが必要になることがあります。最終化処理はqt_finalize_target()コマンドによって実装されます。

詳細とMANUAL_FINALIZATION オプションの意味については、qt_add_libraryファイナライズのドキュメントを参照してください。

qt_finalize_target()qt_add_executable()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。