qt_deploy_runtime_dependencies

実行ファイルに必要な Qt プラグイン、Qt ライブラリ、非 Qt ライブラリをデプロイします。

このコマンドはQt6 パッケージのCore コンポーネントで定義されています:

find_package(Qt6 REQUIRED COMPONENTS Core)

Qt が提供する他の CMake コマンドとは異なり、qt_deploy_runtime_dependencies() はデプロイスクリプトからのみ呼び出すことができます。Qt が提供する他のほとんどの CMake コマンドとは異なり、 はデプロイスクリプトからのみ呼び出すことができます。configure の段階でプロジェクトから直接呼び出すことはできません。

このコマンドは Qt 6.3 で導入されました。

注意: 通常、このコマンドを直接呼び出す必要はありません。このコマンドは他の上位コマンドによって内部的に使用されますが、よりカスタマイズされたデプロイメントロジックを実装したいプロジェクトでは便利です。

概要

qt_deploy_runtime_dependencies(
    EXECUTABLE executable
    [ADDITIONAL_EXECUTABLES files...]
    [ADDITIONAL_LIBRARIES files...]
    [ADDITIONAL_MODULES files...]
    [GENERATE_QT_CONF]
    [BIN_DIR bin_dir]
    [LIBEXEC_DIR libexec_dir]
    [LIB_DIR lib_dir]
    [PLUGINS_DIR plugins_dir]
    [QML_DIR qml_dir]
    [VERBOSE]
    [NO_OVERWRITE]
    [NO_APP_STORE_COMPLIANCE]
    [NO_TRANSLATIONS]
    [NO_COMPILER_RUNTIME]
    [DEPLOY_TOOL_OPTIONS]
    [PRE_INCLUDE_REGEXES regexes...]
    [PRE_EXCLUDE_REGEXES regexes...]
    [POST_INCLUDE_REGEXES regexes...]
    [POST_EXCLUDE_REGEXES regexes...]
    [POST_INCLUDE_FILES files...]
    [POST_EXCLUDE_FILES files...]
)

説明

アプリケーションをインストールする際に、依存するライブラリやプラグインもインストールすることが望ましい場合があります。アプリケーションが macOS アプリバンドルや Windows 実行ファイルの場合、qt_deploy_runtime_dependencies() をインストール時のスクリプトから呼び出すことで、これらの依存関係をデプロイできます。システム以外の Qt ライブラリと適切な Qt プラグインがインストールされます。

Linux では、このコマンドはプロジェクトに含まれる Qt 関連のライブラリだけでなく、その他のライブラリもデプロイします。ただし、macOS や Windows で実行する場合、このコマンドはmacdeployqt またはwindeployqt のどちらかを使用し、Qt 固有のライブラリのみを配置します。

このコマンドは、基礎となるバイナリにリンク関係が存在するランタイムの依存関係のみを考慮します。qt_deploy_qml_imports() を参照してください。

引数

EXECUTABLE オプションを指定する必要があります。

引数executable には、ビルドディレクトリにある実行ファイルのパスを指定します。例えば、${CMAKE_CURRENT_BINARY_DIR}/MyApp.exe 、またはより動的に$<TARGET_FILE:MyApp><TARGET_FILE:> のようにジェネレータ式でラップされていない生のターゲット名を指定することはサポートされていません。

macOSアプリバンドルでは、executable 引数は、ベースインストール場所からの相対パスで、バンドルディレクトリへのパスを指定します。例えば、MyApp.app 、またはより動的に$<TARGET_FILE_NAME:MyApp>.app<TARGET_FILE_NAME:> のような、ジェネレーターepxressionでラップされていない生のターゲット名を指定することはサポートされていません。

また、executable に関連する他のバイナリの依存関係をインストールすることも望 ましいかもしれません。例えば、プロジェクトが提供するプラグインには、さらに依存 関係があるかもしれませんが、それらのプラグインは実行ファイルに直接リンク されないため、qt_deploy_runtime_dependencies() は自動的にそれらを検出しません。ADDITIONAL_EXECUTABLESADDITIONAL_LIBRARIESADDITIONAL_MODULES オプションを使用すると、依存関係を持つ追加のバイナリを指定できます (指定したバイナリ自体のインストールはプロジェクトの責任です)。これらのキーワードの命名は CMake の慣例に従いますので、Qt プラグインはADDITIONAL_MODULES で指定します。それぞれの値は、ベースインストール場所からの相対パスでなければなりません。値は、EXECUTABLE オプションと同じように、ジェネレーター式を使用できます。<TARGET_FILE_NAME:> のようなジェネレータ式でラップされていない生のターゲット名の指定はサポートされていません。

Windows アプリケーションをインストールする場合、CMake のデフォルトのインストールディレクトリ構造に従うと、qt.confファイルが必要になることがよくあります。GENERATE_QT_CONF オプションを指定すると、適切なqt.conf ファイルがexecutable と同じディレクトリに書き込まれます。qt.conf ファイルのパスはCMAKE_INSTALL_xxxDIR 変数に基づいており、そのデフォルトは CMake のGNUInstallDirsモジュールによって提供されます。

以下の表のパラメータで、これらのデフォルトの一部を上書きできます。

パラメータ影響を受ける変数注釈
BIN_DIRqt_deploy_bin_dir
LIBEXEC_DIRqt_deploy_libexec_dirQt 6.7 以降
LIB_DIRqt_deploy_lib_dir
PLUGINS_DIRqt_deploy_plugins_dir
QML_DIRqt_deploy_qml_dir

GENERATE_QT_CONF が提供されているかどうかに関わらず、executable が macOS アプリバンドルである場合、qt.conf ファイルが常に書き込まれます。アプリバンドル内のディレクトリレイアウトは Apple の要件によって決定されるため、この場合..._DIR オプションも無視されます。

デプロイメントステップに関するより詳細な出力は、VERBOSE オプションを指定することで有効にできます。または、最初のfind_package(Qt6) 呼び出しの前にプロジェクトでQT_ENABLE_VERBOSE_DEPLOYMENT変数を設定して、デプロイメント出力をデフォルトで冗長にすることもできます。

qt_deploy_runtime_dependencies() コマンドはデフォルトで既存のファイルを上書きします(警告が表示される場合があります)。既存のファイルを上書きしないようにするには、NO_OVERWRITE オプションを使用します。このオプションは現在、macOS と Windows のデプロイメントにのみ影響することに注意してください。

デフォルトでは、executable が macOS アプリバンドルである場合、Apple の app store 要件に準拠した Qt プラグインと Qt ライブラリのみがデプロイされます。この制約を無効にするには、NO_APP_STORE_COMPLIANCE オプションを指定します。

macOS 以外のプラットフォームでは、Qt の翻訳が自動的にデプロイされます。この動作を無効にするには、NO_TRANSLATIONS を指定します。qt_deploy_translations() を使用して、カスタマイズされた方法でトランスレーションをデプロイします。

Windows デスクトップアプリケーションの場合、コンパイラに必要なランタイムファイルもデフォルトでインストールされます。これを防ぐには、NO_COMPILER_RUNTIME を指定してください。

Qt 6.7 以降では、DEPLOY_TOOL_OPTIONS を使用して、基盤となるデプロイツールに追加のオプションを渡すことができます。これは、基礎となるデプロイツールが macdeployqt または windeployqt の場合にのみ効果があります。

Linux では、ランタイム依存のデプロイは CMake のfile(GET_RUNTIME_DEPENDENCIES) コマンドを使用します。PRE_INCLUDE_REGEXESPRE_EXCLUDE_REGEXESPOST_INCLUDE_REGEXESPOST_EXCLUDE_REGEXESPOST_INCLUDE_FILESPOST_EXCLUDE_FILES のオプションは、このコンテキストでのみ意味があり、変更されずにfile(GET_RUNTIME_DEPENDENCIES) に転送されます。 詳細は、このコマンドのドキュメントを参照してください。

Linuxでは、システム・ライブラリ・ディレクトリにある実行時依存関係は、 デフォルトでは配置されない。POST_EXCLUDE_REGEXES が指定された場合、この自動除外は実行されない。

POST_EXCLUDE_REGEXES のデフォルト値は、QT_DEPLOY_IGNORED_LIB_DIRS の値から構築されます。

以下の例は、アプリケーションMyApp をデプロイする方法を示しています。

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

find_package(Qt6 REQUIRED COMPONENTS Core)
qt_standard_project_setup()

qt_add_executable(MyApp main.cpp)

set_target_properties(MyApp PROPERTIES
    WIN32_EXECUTABLE TRUE
    MACOSX_BUNDLE TRUE
)

# App bundles on macOS have an .app suffix
if(APPLE)
    set(executable_path "$<TARGET_FILE_NAME:MyApp>.app")
else()
    set(executable_path "\${QT_DEPLOY_BIN_DIR}/$<TARGET_FILE_NAME:MyApp>")
endif()

# Helper app, not necessarily built as part of this project.
qt_add_executable(HelperApp helper.cpp)
set(helper_app_path "\${QT_DEPLOY_BIN_DIR}/$<TARGET_FILE_NAME:HelperApp>")

# Generate a deployment script to be executed at install time
qt_generate_deploy_script(
    TARGET MyApp
    OUTPUT_SCRIPT deploy_script
    CONTENT "
qt_deploy_runtime_dependencies(
    EXECUTABLE \"${executable_path}\"
    ADDITIONAL_EXECUTABLES \"${helper_app_path}\"
    GENERATE_QT_CONF
    VERBOSE
)")

# Omitting RUNTIME DESTINATION will install a non-bundle target to CMAKE_INSTALL_BINDIR,
# which coincides with the default value of QT_DEPLOY_BIN_DIR used above, './bin'.
# Installing macOS bundles always requires an explicit BUNDLE DESTINATION option.
install(TARGETS MyApp HelperApp    # Install to CMAKE_INSTALL_PREFIX/bin/MyApp.exe
                                   #                           and ./binHelperApp.exe
        BUNDLE  DESTINATION .      # Install to CMAKE_INSTALL_PREFIX/MyApp.app/Contents/MacOS/MyApp
)
install(SCRIPT ${deploy_script})    # Add its runtime dependencies

次の例は、DEPLOY_TOOL_OPTIONS パラメータを使用して、macdeployqt と windeployqt に異なるオプションを渡す方法を示しています。

set(deploy_tool_options_arg "")
if(APPLE)
    set(deploy_tool_options_arg --hardened-runtime)
elseif(WIN32)
    set(deploy_tool_options_arg --no-compiler-runtime)
endif()

# Generate a deployment script to be executed at install time
qt_generate_deploy_script(
    TARGET MyApp
    OUTPUT_SCRIPT deploy_script
    CONTENT "
qt_deploy_runtime_dependencies(
    EXECUTABLE \"${executable_path}\"
    DEPLOY_TOOL_OPTIONS "${deploy_tool_options_arg}"
    GENERATE_QT_CONF
    VERBOSE
)")

qt_generate_deploy_app_script(),qt_deploy_qt_conf(),qt_deploy_qml_imports()も参照してください

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