本页内容

qt_finalize_target

处理与 Qt 目标相关的各种常见平台特定任务。

该命令定义在Qt6 包的Core 组件中,可按如下方式加载:

find_package(Qt6 REQUIRED COMPONENTS Core)

该命令于 Qt 6.2 版本中引入。

语法概述

qt_finalize_target(target)

如果禁用了无版本号的命令,请改用qt6_finalize_target() 。它支持与本命令相同的参数集。

描述

目标创建后,有时需要进行后续处理或最终化步骤。具体需要执行的步骤取决于平台、目标类型以及目标的各种属性。这些步骤应在创建target 的同一目录范围内执行,因此也应从该目录范围内调用此命令。

该命令通常作为调用qt_add_executable()、qt_add_library() 或qt_add_plugin() 的一部分被调用。关于何时进行该调用以及项目何时可能需要显式调用它,请参阅这些命令的文档。

可执行目标

对于可执行目标,qt_finalize_target() 会根据所提供的平台和目标,适当地实现以下各小节中描述的逻辑。未来的 Qt 版本可能会进一步扩展终结处理功能。

所有平台

为了方便 Qt 插件的自动链接,会执行一些内部处理。如果使用静态构建的 Qt 或早于 3.21 版本的 CMake,这一点尤为重要。

Android

  • 为target 生成部署设置文件。
  • 创建一个用于生成 APK 的构建目标。

WASM

在CMAKE_CURRENT_BINARY_DIR 目录下创建${target}.html (一个针对特定目标的wasm_shell.html 文件)、qtloader.js 以及qtlogo.svg 文件。

iOS

如果以下目标属性尚未设置,且其对应的CMAKE_... 变量也未设置,则Finalization会尝试为这些属性提供合理的值:

  • XCODE_ATTRIBUTE_DEVELOPMENT_TEAM
  • XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER
  • MACOSX_BUNDLE_GUI_IDENTIFIER

如有需要,可使用QT_NO_SET_XCODE_DEVELOPMENT_TEAM_ID变量禁用XCODE_ATTRIBUTE_DEVELOPMENT_TEAM 的设置,并使用QT_NO_SET_XCODE_BUNDLE_IDENTIFIER变量禁用XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER 和MACOSX_BUNDLE_GUI_IDENTIFIER 的设置。

嵌入共享库依赖项

依赖于共享库的应用程序只有在它所链接的共享库属于其软件包的一部分时,才能启动。

自 Qt 6.12 起,构建系统会收集应用程序所链接的共享库,并在启用“CODE_SIGN_ON_COPY ”选项的情况下,将其添加到应用程序的“XCODE_EMBED_FRAMEWORKS ”构建阶段中。该机制同时支持框架包和普通的dylib 库。

只有当满足以下所有条件时,才会进行嵌入:

  • Qt是在共享库配置下构建的。
  • 使用了 Xcode 生成器。
  • Qt 未同时采用调试和发布配置进行构建,因为 `XCODE_EMBED_FRAMEWORKS ` 针对每个库仅保存一条路径,因此无法同时描述这两种配置。
  • 目标是一个应用程序包,而不是应用程序扩展等子包。子包应使用其父应用程序的框架。
  • 目标上尚未设置XCODE_EMBED_FRAMEWORKS 属性,这被视为项目自行处理嵌入的标志。

若要自行部署共享库,请在应用程序目标上设置QT_NO_XCODE_EMBED_FRAMEWORKS属性。

若要排除特定库,请在这些库上设置QT_NO_XCODE_EMBED_FRAMEWORK_IN_CONSUMERS属性。

库目标

截至此 Qt 版本,库目标的终结处理不会执行任何操作。未来的 Qt 版本可能会为库添加终结处理,因此您应确保终结处理仍能按预期方式被调用。

另请参阅 qt_set_finalizer_mode()。

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