Sur cette page

qt_generate_deploy_qml_app_script

Générer un script de déploiement pour une application QML.

La commande est définie dans le composant « Qml » du paquet « Qt6 », qui peut être chargé comme suit :

find_package(Qt6 REQUIRED COMPONENTS Qml)

Cette commande a été introduite dans Qt 6.3.

Avertissement : si vous utilisez une version de CMake antérieure à la version 3.19, veillez à passer l'option MANUAL_FINALIZATION à qt_add_executable(), puis à appeler qt_finalize_target() avant d'appeler cette fonction.

Synopsis

qt_generate_deploy_qml_app_script(
    TARGET <target>
    OUTPUT_SCRIPT <var>
    [NO_UNSUPPORTED_PLATFORM_ERROR]
    [NO_TRANSLATIONS]
    [NO_COMPILER_RUNTIME]
    [NO_PLUGINS]                                  # since Qt 6.10
    [EXCLUDE_PLUGIN_TYPES type_or_target...]      # since Qt 6.10
    [INCLUDE_PLUGIN_TYPES type_or_target...]      # since Qt 6.10
    [EXCLUDE_PLUGINS name...]                     # since Qt 6.10
    [INCLUDE_PLUGINS name...]                     # since Qt 6.10
    [DEPLOY_TOOL_OPTIONS ...]
    [DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM]
    [PRE_INCLUDE_REGEXES regexes...]
    [PRE_EXCLUDE_REGEXES regexes...]
    [POST_INCLUDE_REGEXES regexes...]
    [POST_EXCLUDE_REGEXES regexes...]
    [POST_INCLUDE_FILES files...]
    [POST_EXCLUDE_FILES files...]
)

Si les commandes sans version sont désactivées, utilisez plutôt qt6_generate_deploy_qml_app_script(). Elle prend en charge le même ensemble d'arguments que cette commande.

Description

L’installation d’une cible exécutable qui est également un module Qml nécessite le déploiement d’un certain nombre d’éléments en plus de la cible elle-même. Les bibliothèques Qt et autres bibliothèques du projet, les plugins Qt, ainsi que les composants d’exécution de tous les modules Qml utilisés par l’application peuvent également devoir être installés. La structure d’installation sera également différente pour les bundles d’applications macOS par rapport aux autres plateformes. La commande ` qt_generate_deploy_qml_app_script() ` est une commande pratique destinée à simplifier ce processus, à l’instar de ce que fait `qt_generate_deploy_app_script()` pour les applications non-QML.

La commande suppose que l’application respecte assez fidèlement la structure de répertoires d’installation recommandée par Qt. Cette structure repose sur la configuration d’installation par défaut de CMake, telle que définie par GNUInstallDirs (à l’exception des paquets d’applications macOS, qui suivent plutôt les exigences d’Apple). Les modules QML sont installés à l’emplacement approprié pour la plateforme. Pour les bundles macOS, le fichier ` qmldir ` de chaque module QML est installé dans le sous-répertoire approprié sous ` Resources/qml `, et le plugin du module (le cas échéant) est installé sous ` PlugIns`. Le bundle de l'application est supposé être installé directement à l'emplacement d'installation de base (voir l'exemple ci-dessous). Pour toutes les autres plateformes, le fichier ` qmldir ` et le plugin du module sont tous deux installés dans le sous-répertoire approprié sous ` qml`, qui est lui-même relatif à l’emplacement d’installation de base.

qt_generate_deploy_qml_app_script() génère un script dont le nom sera stocké dans la variable spécifiée par l’option OUTPUT_SCRIPT. Ce script n’est écrit qu’au moment de la génération par CMake. Il est destiné à être utilisé avec la commande install(SCRIPT), qui doit intervenir après l’installation de la cible de l’application à l’aide de install(TARGETS).

Le script de déploiement appellera ` qt_deploy_qml_imports() ` avec un ensemble d’options adapté à la structure d’installation standard. Pour les bundles d’applications macOS et les cibles Windows, il appellera ensuite ` qt_deploy_runtime_dependencies()`, là encore avec des options adaptées à la structure d’installation standard.

L'appel de ` qt_generate_deploy_qml_app_script() ` pour une plateforme non prise en charge par ` qt_deploy_runtime_dependencies ` entraînera une erreur fatale, à moins que l’option ` NO_UNSUPPORTED_PLATFORM_ERROR ` ne soit spécifiée. Lorsque cette option est spécifiée et que le projet est compilé pour une plateforme non prise en charge, ni les modules QML ni les dépendances d’exécution standard ne seront installés. Pour vous assurer que les modules QML soient tout de même installés, spécifiez à la fois les options ` NO_UNSUPPORTED_PLATFORM_ERROR ` et ` DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM `. Cette dernière option garantit que les modules QML compilés dans le cadre du projet seront tout de même installés.

Sur les plateformes autres que macOS, les traductions Qt sont automatiquement déployées. Pour désactiver ce comportement, spécifiez NO_TRANSLATIONS. Utilisez qt_deploy_translations() pour déployer les traductions de manière personnalisée.

Pour les applications de bureau Windows, les fichiers d’exécution requis pour le compilateur sont également installés par défaut. Pour empêcher cela, spécifiez ` NO_COMPILER_RUNTIME`.

Depuis Qt 6.7, vous pouvez utiliser ` DEPLOY_TOOL_OPTIONS ` pour transmettre des options supplémentaires à l’outil de déploiement sous-jacent. Cela n’a d’effet que si l’outil de déploiement sous-jacent est soit `macdeployqt`, soit `windeployqt`.

Remarque : une valeur contenant des espaces, comme une identité de signature de code, n’est transmise telle quelle à l’outil de déploiement que si QTP0007 est défini sur « NEW ». Avec le comportement « OLD », une telle valeur est écrite sans guillemets dans le script généré et est fractionnée aux espaces, ce à quoi les projets remédiaient auparavant en ajoutant un niveau supplémentaire de guillemets. Supprimez ces guillemets supplémentaires lorsque vous définissez la politique sur « NEW ».

Remarque : la valeur « qt_generate_deploy_qml_app_script() » (sans version) transmet ses arguments via une fonction ou une macro, selon la valeur de QTP0008. Avec le comportement « OLD », une valeur contenant une barre oblique inversée ou une référence « ${var} » est évaluée au moment de l’expansion de la macro ; ainsi, une expression régulière telle que « foo\\.dylib » perd un niveau d’échappement. Cela affecte « DEPLOY_TOOL_OPTIONS » ainsi que les arguments d’expression régulière et de liste de fichiers. L'appel direct de ` qt6_generate_deploy_qml_app_script() ` permet d'éviter ce problème.

Les options PRE_INCLUDE_REGEXES, PRE_EXCLUDE_REGEXES, POST_INCLUDE_REGEXES, POST_EXCLUDE_REGEXES, POST_INCLUDE_FILES et POST_EXCLUDE_FILES peuvent être spécifiées pour contrôler le déploiement des dépendances d'exécution. Ces options ne s'appliquent pas à toutes les plateformes et sont transmises telles quelles à la fonction qt_deploy_runtime_dependencies().

Les options EXCLUDE_PLUGINS, EXCLUDE_PLUGIN_TYPES, INCLUDE_PLUGINS et INCLUDE_PLUGIN_TYPES permettent de sélectionner des plugins Qt. Reportez-vous à la documentation de qt_deploy_runtime_dependencies() pour plus d’informations.

Vous pouvez désactiver complètement le déploiement des plugins à l’aide de l’option NO_PLUGINS.

Pour déployer une application non-QML, utilisez plutôt qt_generate_deploy_app_script(). L'appel simultané de qt_generate_deploy_qml_app_script() et de qt_generate_deploy_app_script() pour une même cible génère une erreur.

Exemple

L'exemple suivant montre comment déployer une application Qt Quick.

cmake_minimum_required(VERSION 3.16...3.22)
project(MyThings)

find_package(Qt6 6.3 REQUIRED COMPONENTS Core Qml)
qt_standard_project_setup()

qt_add_executable(MyApp main.cpp)
qt_add_qml_module(MyApp
    URI Application
    VERSION 1.0
    QML_FILES main.qml MyThing.qml
)

install(TARGETS MyApp
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

qt_generate_deploy_qml_app_script(
    TARGET MyApp
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
    DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
install(SCRIPT ${deploy_script})

L'exemple suivant montre comment passer des options supplémentaires à l'outil de déploiement sous-jacent.

# Pass the values on to the deploy tool unchanged, see \l {QTP0007}.
qt_policy(SET QTP0007 NEW)

set(deploy_tool_options_arg "")
if(APPLE)
    set(deploy_tool_options_arg
        --hardened-runtime
        "-codesign=Developer ID Application: Joe Developer (1234567890)"
    )
elseif(WIN32)
    set(deploy_tool_options_arg --no-compiler-runtime)
endif()

qt_generate_deploy_qml_app_script(
    ...
    DEPLOY_TOOL_OPTIONS ${deploy_tool_options_arg}
)
install(SCRIPT ${deploy_script})

Voir également qt_standard_project_setup(), qt_generate_deploy_app_script(), QTP0007 et QTP0008.

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