Auf dieser Seite

QTP0005

Die Abhängigkeitsschlüsselwörter von „ qt_add_qml_module() “ sollen CMake-Ziele akzeptieren.

Diese Richtlinie wurde in Qt 6.8 eingeführt. Sie ermöglicht die Übergabe von CMake-Zielen an ` qt_add_qml_module()` über die Schlüsselwörter ` DEPENDENCIES`, ` IMPORTS`, ` OPTIONAL_IMPORTS` und ` DEFAULT_IMPORTS `.

Die Aktivierung dieser Richtlinie bedeutet, dass den an diese Schlüsselwörter übergebenen Argumenten das Präfix „ TARGET “ vorangestellt werden kann und sie dann als CMake-Zielname behandelt werden. Die URI des QML-Moduls und der Importpfad werden automatisch aus dem Ziel abgeleitet.

Das „ OLD “-Verhalten dieser Richtlinie besteht darin, dass die Token-Sequenz „ TARGET name “ als zwei separate URIs behandelt wird: „ TARGET “ und „ name “.

Das „ NEW “-Verhalten dieser Richtlinie sieht vor, dass „ TARGET “ ein Schlüsselwort ist. Die URI wird aus dem nachfolgenden QML-Modul-Ziel extrahiert. Es liegt ein schwerwiegender Fehler vor, wenn der auf „ TARGET “ folgende Name nicht auf ein vorhandenes Ziel verweist oder wenn dieses Ziel keinem QML-Modul entspricht.

Sowohl bei der Verwendung von „ NEW “ als auch bei „ OLD “ ist es möglich, eine Modulversion anzugeben, indem ein Schrägstrich und die Versionsnummer angehängt werden. Weitere Details finden Sie unter „Modulabhängigkeiten deklarieren “.

Hintergrund

Vor Einführung dieser Richtlinie mussten QML-Modulabhängigkeiten über ihre String-URI deklariert werden, zum Beispiel QtQuick oder com.example.mymodule. Dies bedeutete, dass die URI und, falls erforderlich, der Importpfad der Abhängigkeit mit dem CMake-Ziel, das das Modul bereitstellt, konsistent gehalten werden mussten.

Mit dem Verhalten von NEW können Sie stattdessen über den Namen des CMake-Targets auf eine Abhängigkeit verweisen. Das Build-System ermittelt dann automatisch die korrekte URI und den Importpfad aus dem Target. Dadurch entfällt die Notwendigkeit, IMPORT_PATH-Einträge für Abhängigkeiten außerhalb des Standard-QML-Importpfads manuell anzugeben, Redundanzen werden reduziert und eine Klasse von Kopier- und Einfügefehlern wird vermieden.

Beispiel

Stellen Sie sich ein Modul vor, das von einem anderen Modul abhängt, das im selben Projekt definiert ist. Mit dem Verhalten „ OLD “ (oder vor Qt 6.8) muss die URI explizit angegeben werden:

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        OtherModule
)

Mit dem Verhalten „ NEW “ (Richtlinie QTP0005 auf „ NEW “ gesetzt) können Sie auf die Abhängigkeit über ihren CMake-Zielnamen verweisen:

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
)

Die gleiche „ TARGET “-Syntax steht für „ IMPORTS “, „ OPTIONAL_IMPORTS “ und „ DEFAULT_IMPORTS “ zur Verfügung.

Wenn das Modulziel eine ausführbare Datei ist und „ TARGET “-Abhängigkeiten verwendet werden, generiert `qt_add_qml_module()` automatisch eine ` qt.conf `-Datei neben der ausführbaren Datei im Build-Verzeichnis. Diese Datei konfiguriert den QML-Importpfad so, dass als „ TARGET “-Abhängigkeiten angegebene QML-Module zur Laufzeit gefunden werden können. Verwenden Sie ` NO_GENERATE_QTCONF `, um dieses Verhalten zu unterdrücken.

Wie oben gezeigt, können Sie die Richtlinie vor dem Aufruf von ` qt_add_qml_module()` explizit mit ` qt_policy(SET QTP0005 NEW) ` festlegen. Alternativ können Sie `qt_standard_project_setup() ` mit einer ` REQUIRES `-Version ab 6.8 aufrufen, um alle Richtlinien bis zu dieser Version zu aktivieren.

Qt 6.8 gibt eine Verwendungswarnung aus, wenn Sie „ TARGET “ als Token in „ DEPENDENCIES “, „ IMPORTS “, „ OPTIONAL_IMPORTS “ oder „ DEFAULT_IMPORTS “ verwenden, während die Richtlinie auf „ OLD “ gesetzt ist. Verwenden Sie den Befehl „qt_policy()“, um die Warnung zu unterdrücken, indem Sie die Richtlinie explizit auf „ OLD “ oder „ NEW “ setzen.

Hinweis: Das Verhalten „ OLD “ einer Richtlinie ist veraltet und wird möglicherweise in Zukunft entfernt.

Siehe auch qt_policy(), qt_standard_project_setup(), qt_cmake_policies und 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.