このページでは

QTP0005

qt_add_qml_module 依存キーワードは CMake ターゲットを受け入れます。

このポリシーは Qt 6.8 で導入されました。DEPENDENCIES,IMPORTS,OPTIONAL_IMPORTS,DEFAULT_IMPORTS キーワードを通してqt_add_qml_module()に CMake ターゲットを渡すことができます。

このポリシーを有効にすると、これらのキーワードに渡される引数の先頭にTARGET を付けることができ、CMakeターゲット名として扱われます。QMLモジュールのURIとインポートパスはターゲットから自動的に導かれます。

このポリシーのOLD の動作は、トークン列TARGET nameTARGETname の2つの別々の URI として扱われることです。

このポリシーのNEW 動作は、TARGET がキーワードであるということです。URIはそれに続くQMLモジュールターゲットから抽出されます。TARGET に続く名前が既存のターゲットを指していない場合、あるいはそのターゲットがQMLモジュールに対応していない場合はハードエラーとなります。

NEWOLD のどちらの動作においても、スラッシュとバージョンを付加することで、モジュールのバージョンを指定することができます。詳しくはモジュール依存の宣言を参照してください。

背景

このポリシーが適用される以前は、QMLモジュールの依存関係は、QtQuickcom.example.mymodule のように、文字列URIで宣言する必要がありました。 このため、依存関係のURIや、必要に応じてインポートパスを、モジュールを提供するCMakeターゲットと一致させておく必要がありました。

NEW の動作では、代わりに CMake ターゲット名で依存関係を参照できます。ビルドシステムは、ターゲットから正しいURIとインポートパスを自動的に決定します。これにより、デフォルトのQMLインポートパスの外側にある依存関係のIMPORT_PATHエントリを手動で指定する必要がなくなり、冗長性が減少し、コピーペーストの間違いがなくなります。

同じプロジェクトで定義された別のモジュールに依存するモジュールを考えてみましょう。OLD の動作(または Qt 6.8 以前)では、URI を明示的に記述する必要があります:

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        OtherModule
)

NEW ビヘイビア(ポリシー QTP0005 をNEW に設定)では、CMake ターゲット名で依存関係を参照できます:

qt_policy(SET QTP0005 NEW)

qt_add_qml_module(other_module
    URI OtherModule
    VERSION 1.0
)

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        TARGET other_module
)

IMPORTSOPTIONAL_IMPORTSDEFAULT_IMPORTS では、同じTARGET 構文を使用できます。

上記のように、qt_add_qml_module() を呼び出す前に、qt_policy(SET QTP0005 NEW) で明示的にポリシーを設定することができます。あるいは、REQUIRES バージョン 6.8 以降でqt_standard_project_setup() を呼び出すと、そのバージョンまでのすべてのポリシーが有効になります。

Qt 6.8 では、ポリシーがOLD に設定されているときにDEPENDENCIES,IMPORTS,OPTIONAL_IMPORTS,DEFAULT_IMPORTS のトークンとしてTARGET を使用すると、非推奨の警告が表示されます。qt_policyコマンドを使用して、ポリシーをOLD またはNEW に明示的に設定することで、警告を抑制することができます。

注意: ポリシーのOLD の動作は非推奨であり、将来削除される可能性があります。

qt_policy,qt_standard_project_setup(),qt_cmake_policies,qt_add_qml_moduleも参照してください

© 2026 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.