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_CACHEGENNO_LINT オプションもqt_add_qml_module() と同じ効果があります。これらはQML_FILES でリストされたファイルのバイトコードコンパイルと lint 処理を無効にします。この動作は、ソースファイルのプロパティを使用して、個々のファイルに対してのみ指定することもできます。

NO_QMLDIR_TYPES 生成されるqmldirファイルに が型として追加されるのを防ぎます。QML_FILES

RESOURCES qt_add_qml_module()コマンドの オプションとまったく同じ効果があります。これは に通常のリソースとして追加されるファイルのリストを提供します。これらのファイルは通常、イメージやシェーダなど、QMLコードが何らかの方法で参照するものです。RESOURCES target

QML_FILESRESOURCES を使ってモジュールに追加されたファイルは、qt_add_qml_module()コマンドで追加された場合と同じリソースプレフィックスとターゲットパスに配置されます。これはPREFIX オプションで別の場所を指定することで上書きできます。PREFIX キーワードに続く値は、ターゲットパスを追加せずに直接使用されます。CMAKE_CURRENT_SOURCE_DIRQT_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_TARGETSqt_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 ファイルの自動生成」を参照)。これは通常、プライベートなJavaScriptファイルなど、パブリックな型を公開しないファイルに使用されます。大文字の名前を持つJavaScriptファイルで、ECMAScriptモジュールでもなく、.pragma library を介してステートレスライブラリとして宣言されたものでもない場合、このオプションを考慮する必要があります。qmldir ファイルに含めると、そのファイルが属するモジュールを明示的または暗黙的にインポートするすべてのQML文書のスコープで再評価されます。

デフォルトでは、 qmldir ファイルを生成する際、型を提供する.qml ファイルごとに1つの型エントリが生成されます。このファイルにはバージョン番号X.0X は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引数で上書きすることができます。相対パスのデフォルトはtargetSOURCE_DIR ターゲットプロパティからの相対パスです。この相対パスは、ソース・ファイルにQT_RESOURCE_ALIAS プロパティを設定することで上書きすることができる。これは、異なるディレクトリからファイルを収集し、それらを共通の場所の下にリソースに表示させるために一般的に使用されます。しかし、Qt 6.8以降では、QMLモジュールのすべてのファイルを暗黙のインポートで見つけることを目的とする場合、QTP0004を有効にする方が良い場合があります。このような手動設定が必要な場合は、NO_GENERATE_EXTRA_QMLDIRSqt_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 {}

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