Auf dieser Seite

QTP0005

qt_add_qml_module-Schlüsselwörter für Abhängigkeiten akzeptieren CMake-Ziele

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

Das Aktivieren dieser Richtlinie bedeutet, dass Argumente, die diesen Schlüsselwörtern übergeben werden, mit TARGET vorangestellt werden können und dann als CMake-Zielname behandelt werden. Die QML-Modul-URI und der Importpfad werden automatisch aus dem Ziel abgeleitet.

Das OLD Verhalten dieser Richtlinie ist, dass die Token-Sequenz TARGET name als zwei separate URIs behandelt wird, TARGET und name.

Das NEW Verhalten dieser Richtlinie ist, dass TARGET ein Schlüsselwort ist. Der URI wird aus dem folgenden QML-Modulziel extrahiert. Es ist ein schwerer Fehler, wenn der Name, der auf TARGET folgt, nicht auf ein bestehendes Ziel verweist oder wenn dieses Ziel nicht einem QML-Modul entspricht.

Sowohl im NEW als auch im OLD Verhalten ist es möglich, eine Modulversion durch Anhängen eines Schrägstrichs und der Version anzugeben. Siehe Deklaration von Modulabhängigkeiten für weitere Details.

Hintergrund

Vor dieser Richtlinie mussten QML-Modulabhängigkeiten durch ihre String-URI deklariert werden, z. B. 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 musste.

Mit dem Verhalten NEW können Sie stattdessen auf eine Abhängigkeit durch den Namen ihres CMake-Ziels verweisen. Das Build-System ermittelt dann automatisch den korrekten URI und Importpfad aus dem Ziel. Dadurch entfällt die Notwendigkeit, IMPORT_PATH-Einträge für Abhängigkeiten außerhalb des standardmäßigen QML-Importpfads manuell anzugeben, Redundanz wird reduziert und eine Reihe von Copy-Paste-Fehlern wird vermieden.

Beispiel

Betrachten Sie ein Modul, das von einem anderen, im selben Projekt definierten Modul abhängt. Mit dem Verhalten OLD (oder vor Qt 6.8) muss der URI explizit angegeben werden:

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        OtherModule
)

Mit dem Verhalten NEW (die Richtlinie QTP0005 ist auf NEW gesetzt) können Sie auf die Abhängigkeit durch 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 ist für IMPORTS, OPTIONAL_IMPORTS und DEFAULT_IMPORTS verfügbar.

Wie oben gezeigt, können Sie die Richtlinie explizit mit qt_policy(SET QTP0005 NEW) setzen, bevor Sie qt_add_qml_module() aufrufen. Alternativ dazu können Sie qt_standard_project_setup() mit einer REQUIRES Version von 6.8 oder höher aufrufen, um alle Richtlinien bis zu dieser Version zu aktivieren.

Qt 6.8 gibt eine Deprecation-Warnung 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 OLD -Verhalten einer Richtlinie ist veraltet und wird möglicherweise in Zukunft entfernt werden.

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.