qt_target_qml_sources
このコマンドは Qt 6.2 で導入されました。
概要
qt_target_qml_sources( target [QML_FILES ...] [RESOURCES ...] [PREFIX resource_path] [OUTPUT_TARGETS out_targets_var] [NO_LINT] [NO_CACHEGEN] [NO_QMLDIR_TYPES] )
バージョンレスコマンドが無効になっている場合は、代わりにqt6_target_qml_sources()
を使ってください。このコマンドと同じ引数セットをサポートしている。
説明
注意: このコマンドはCMake 3.19以降が必要です。
qt_target_qml_sources()
は、qt_add_qml_module() が呼ばれた後に、さらに QML モジュールにファイルを追加する機能を提供します。通常、 ファイルとリソースのセットを直接.qml
qt_add_qml_module()に渡しますが、場合によってはqt_add_qml_module() が呼ばれた後でファイルを追加することが望ましい、あるいは必要なこともあります。例えば、 文の式に基づいて条件付きでファイルを追加したい場合や、特定の条件が満たされた場合にのみ追加されるサブディレクトリからファイルを追加したい場合などです。また、リソース接頭辞が異なったり、リンティングやバイトコードコンパイルが無効になっているなど、他のファイルとは異なる特性を持つファイル群を追加したい場合もあるでしょう。 コマンドはこのようなシナリオを可能にします。if
qt_target_qml_sources()
引数
target
はQMLモジュールのバッキングターゲットでなければならず、 QMLモジュールのバッキングターゲットがない場合はモジュールのプラグインター ゲットでなければならない。
QML_FILES
はQMLモジュールに追加する 、 、 ファイルのリストです。このオプションは.qml
.js
.mjs
qt_add_qml_module()コマンドの オプションと全く同じ効果を持ち、バイトコードへの自動コンパイルやlint処理も含みます。QML_FILES
NO_CACHEGEN
とNO_LINT
オプションもqt_add_qml_module() と同じ効果があります。これらはQML_FILES
でリストされたファイルのバイトコードコンパイルと lint 処理を無効にします。この動作は、ソースファイルのプロパティを使用して、個々のファイルに対してのみ指定することもできます。
NO_QMLDIR_TYPES
生成されるqmldirファイルに が型として追加されるのを防ぎます。QML_FILES
RESOURCES
qt_add_qml_module()コマンドの オプションとまったく同じ効果があります。これは に通常のリソースとして追加されるファイルのリストを提供します。これらのファイルは通常、イメージやシェーダなど、QMLコードが何らかの方法で参照するものです。RESOURCES
target
QML_FILES
やRESOURCES
を使ってモジュールに追加されたファイルは、qt_add_qml_module()コマンドで追加された場合と同じリソースプレフィックスとターゲットパスに配置されます。これはPREFIX
オプションで別の場所を指定することで上書きできます。PREFIX
キーワードに続く値は、ターゲットパスを追加せずに直接使用されます。CMAKE_CURRENT_SOURCE_DIR
QT_RESOURCE_ALIASソースファイルプロパティを使用して、相対パスをオーバーライドすることもできます。
qt_add_qml_module(backing URI Example VERSION 1.0 RESOURCE_PREFIX /my.company.com/imports ) qt_target_qml_sources(backing QML_FILES special/First.qml RESOURCES icons/logo.png ) qt_target_qml_sources(backing PREFIX /other.company.com/debugging QML_FILES Inspector.qml )
上記の例では、backing
ターゲットのリソースは以下の内容になります:
/my.company.com/imports/Example/special/First.qml
/my.company.com/imports/Example/icons/logo.png
/other.company.com/debugging/Inspector.qml
OUTPUT_TARGETS
もqt_add_qml_module() のオプションと同じです。静的ビルド用に作成された追加ターゲットを格納する変数名を指定するために使用します。 がインストールされる場合、リンク要件を満たすためにこれらの追加ターゲットもインストールする必要があります。target
ソースファイルのプロパティ
ソースファイルのプロパティは、.qml
の各ファイルが QML モジュールの処理においてどのように扱われるかを指定するものです。これらのプロパティはqt_target_qml_sources()
やqt_add_qml_module() の呼び出しで指定された上位のオプションを上書きします。これらのプロパティは、ファイルを追加する前に設定する必要があります。
QT_QML_SKIP_QMLLINT
を に設定することで、ソースファイルがTRUE
自動 qmllint 処理に含まれないようにすることができます。デフォルトでは、すべての ファイルがターゲットの lint 実行に含まれますが、このオプションを使って特定のファイルを除外することができます。.qml
QT_QML_SKIP_CACHEGEN
target
このプロパティが に設定されている場合、ソースファイルがバイトコードにコンパイルされるのを防ぐことができます。TRUE
QMLやJavaScriptのファイルが、QMLモジュールのqmldir
ファイルに型として追加されないようにするには、QT_QML_SKIP_QMLDIR_ENTRY
ソースファイルプロパティをTRUE
に設定します(「qmldir
と typeinfo ファイルの自動生成」を参照)。これは通常、privateなJavaScriptファイルのように、publicな型を公開しないファイルに使用されます。大文字の名前を持つJavaScriptファイルで、ECMAScriptモジュールでもなく、.pragma library
を介してステートレスライブラリとして宣言されたものでもない場合、このオプションを考慮する必要があります。qmldir
ファイルに含めると、そのファイルが属するモジュールを明示的または暗黙的にインポートするすべてのQML文書のスコープで再評価されます。
デフォルトでは、 qmldir
ファイルを生成する際、型を提供する.qml
ファイルごとに1つの型エントリが生成されます。このファイルにはバージョン番号X.0
(X
はQMLモジュールのメジャーバージョン)が与えられます。もしQMLモジュールにPAST_MAJOR_VERSIONS
が設定されていれば、それらにも同じパターンが適用され、過去のメジャーバージョンX
ごとにX.0
が追加されます。異なるバージョンの型エントリーを提供する必要がある場合(例えば、.0
リリース後のマイナーパッチバージョンで初めて追加された場合など)は、ソースファイルのQT_QML_SOURCE_VERSIONS
プロパティでそれらのバージョンを指定してください。各バージョンに対して1つのタイプ・エントリーが作成されます。
.qml
ファイルが提供する型がシングルトンである場合、そのQT_QML_SINGLETON_TYPE
プロパティをTRUE
に設定します。同様に、ファイルのQT_QML_INTERNAL_TYPE
ソース・プロパティをTRUE
に設定することで、提供する型が内部型であることを示すことができます。型自体の名前も、QT_QML_SOURCE_TYPENAME
プロパティを使用してオーバーライドできます。これら 3 つはすべて、生成されるqmldir
ファイルの型エントリに反映されます。ソース・プロパティは、シングルトンが属するモジュールを作成する前に設定する必要があります。
QML_FILES
またはRESOURCES
でリストされたファイルはすべて、target
のリソースに追加されます。リソース内の位置は、基点と相対パスで構成されます。ベースポイントのデフォルトはQMLモジュールのリソースプレフィックスとターゲットパスを連結したものですが、PREFIX引数で上書きすることができます。相対パスのデフォルトはtarget
のSOURCE_DIR
ターゲットプロパティからの相対パスです。この相対パスは、ソース・ファイルにQT_RESOURCE_ALIAS
プロパティを設定することで上書きすることができる。これは、異なるディレクトリからファイルを収集し、それらを共通の場所の下にリソースに表示させるために一般的に使用されます。しかし、Qt 6.8以降では、QMLモジュールのすべてのファイルを暗黙のインポートで見つけることを目的とする場合、QTP0004を有効にする方が良い場合があります。このような手動設定が必要な場合は、NO_GENERATE_EXTRA_QMLDIRS
をqt_add_qml_module
に渡すことをお勧めします。
set_source_files_properties(nested/way/down/File.qml PROPERTIES QT_RESOURCE_ALIAS File.qml ) set_source_files_properties(TemplateFile.qml PROPERTIES QT_RESOURCE_ALIAS templates/File.qml QT_QML_SKIP_QMLDIR_ENTRY TRUE QT_QML_SKIP_QMLLINT TRUE QT_QML_SKIP_CACHEGEN TRUE ) set_source_files_properties(FunnySingleton.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE ) qt_add_qml_module(qt_target_qml_sources_example URI Example VERSION 2.3 RESOURCE_PREFIX /my.company.com/imports NO_GENERATE_EXTRA_QMLDIRS QML_FILES nested/way/down/File.qml TemplateFile.qml FunnySingleton.qml ) set_source_files_properties(some_old_thing.qml PROPERTIES QT_QML_SOURCE_VERSIONS "1.1;2.0" QT_QML_SOURCE_TYPENAME OldThing ) set_source_files_properties(../../../images/button-types.png PROPERTIES QT_RESOURCE_ALIAS button-types.png ) qt_target_qml_sources(qt_target_qml_sources_example QML_FILES some_old_thing.qml RESOURCES ../../../images/button-types.png doc/README.txt )
上記の例では、qt_target_qml_sources_example
ターゲットのリソースは以下の内容になります:
/my.company.com/imports/Example/File.qml
/my.company.com/imports/Example/FunnySingleton.qml
/my.company.com/imports/Example/templates/File.qml
/my.company.com/imports/Example/some_old_thing.qml
/my.company.com/imports/Example/button-types.png
/my.company.com/imports/Example/doc/README.txt
生成されたqmldir
ファイルには、以下のタイプ・エントリーが含まれる:
File 2.0 File.qml singleton FunnySingleton 2.0 FunnySingleton.qml OldThing 1.1 some_old_thing.qml OldThing 2.0 some_old_thing.qml
注: ソースの FunnySingleton.qml ファイルには、すでにpragma Singleton
ステートメントが含まれている必要があります。QT_QML_SINGLETON_TYPE
sourceプロパティを設定しても、自動的にプラグマは生成されません。
pragma Singleton
import QtQml
QtObject {}
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.