qt_target_qml_sources
このコマンドは Qt 6.2 で導入されました。
このコマンドはQt6
パッケージのQml
コンポーネントで定義されています:
find_package(Qt6 REQUIRED COMPONENTS Qml)
概要
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()コマンドのQML_FILES
オプションと全く同じ効果を持ち、バイトコードへの自動コンパイルやlint処理も含みます。
NO_CACHEGEN
とNO_LINT
オプションもqt_add_qml_module() と同じ効果があります。これらはQML_FILES
でリストされたファイルのバイトコードコンパイルと lint 処理を無効にします。この動作は、ソースファイルのプロパティを使用して、個々のファイルに対してのみ指定することもできます。
NO_QMLDIR_TYPES
生成されるqmldirファイルにQML_FILES
が型として追加されるのを防ぎます。
RESOURCES
qt_add_qml_module()コマンドのRESOURCES
オプションとまったく同じ効果があります。これはtarget
に通常のリソースとして追加されるファイルのリストを提供します。これらのファイルは通常、イメージやシェーダなど、QMLコードが何らかの方法で参照するものです。
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 処理に含まれないようにすることができます。デフォルトでは、すべての.qml
ファイルがターゲットの lint 実行に含まれますが、このオプションを使って特定のファイルを除外することができます。
QT_QML_SKIP_CACHEGEN
target
このプロパティがTRUE
に設定されている場合、ソースファイルがバイトコードにコンパイルされるのを防ぐことができます。
QMLやJavaScriptのファイルが、QMLモジュールのqmldir
ファイルに型として追加されないようにするには、QT_QML_SKIP_QMLDIR_ENTRY
ソースファイルプロパティをTRUE
に設定します(「qmldir
と typeinfo ファイルの自動生成」を参照)。これは通常、プライベートなJavaScriptファイルなど、パブリックな型を公開しないファイルに使用されます。大文字の名前を持つ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.