qt_add_executable

创建并最终确定一个特定平台类型的应用程序目标。

此命令定义在 Qt6 软件包的 Core 组件中,可以像这样加载

find_package(Qt6 REQUIRED COMPONENTS Core)

此命令是从 Qt 6.0 开始引入的。

概述

qt_add_executable(target
                  [WIN32] [MACOSX_BUNDLE]
                  [MANUAL_FINALIZATION]
                  sources...)

如果 无版本命令 已禁用,则使用 qt6_add_executable() 代替。它支持与该命令相同的参数集。

描述

此命令执行以下任务

  • 为目标平台创建适当类型的 CMake 目标。
  • 将目标链接到 Qt::Core 库。
  • 处理 CMake 目标的最终确定。

目标创建

除 Android 外的所有平台上,将创建一个可执行的目标。所有参数将通过标准 CMake add_executable() 命令传递,除非存在 MANUAL_FINALIZATION。在 Android 上,将创建一个 MODULE 库,任何 WIN32MACOSX_BUNDLE 选项都将被忽略。某些目标属性也适用于 Android

  • SUFFIX 目标属性设置为向库文件名添加特定体系结构的后缀。
  • 将各种 <lang>_VISIBILITY_PRESET 目标属性设置为 default,以确保 main() 函数在生成的二进制文件中可见。

链接 Qt::Core

由于所有 Qt 应用程序都需要链接到 Qt::Core 库,因此这为您作为便利措施完成。

最终确定

创建目标后,通常需要进一步处理或 最终确定 步骤。要执行的任务取决于平台和目标的各种属性。

最终化处理通过两个命令实现:qt_finalize_target()qt_finalize_project()

目标最终化可以发生在调用 qt_add_executable 的一部分,或者推迟到在调用此命令之后(但仍应位于同一目录范围之内)。

当使用 CMake 3.19 或更高版本时,目标最终化会自动推迟到当前目录范围的末尾。这给调用者提供了在最终确定之前修改创建的目标属性的机会。当使用 CMake 3.19 以下版本时,不支持自动推迟。在这种情况下,目标最终化在返回此命令之前立即执行。

无论使用什么版本的 CMake,都可以通过给 MANUAL_FINALIZATION 关键字来指示您将显式调用 qt_finalize_target(),在某次后续的时间来进行。通常情况下,除非项目必须支持 CMake 3.18 或更早版本,否则不需要使用 MANUAL_FINALIZATION

当使用 CMake 3.19 或更高版本时,项目结束会自动发生。当使用较旧的 CMake 版本时,应在根 CMakeLists.txt 文件的末尾手动调用 qt_finalize_project()。这在针对 Android 时尤其重要,是为了收集在部署过程中的项目目标之间的依赖项。

示例

在以下简单情况下,结束过程会自动处理。如果使用 CMake 版本低于 3.19,结束过程将立即作为调用的一部分执行。当使用 CMake 3.19 或更高版本时,结束过程将在当前目录作用域的末尾发生。

qt_add_executable(simpleapp main.cpp)

以下示例显示了一个必须延迟结束的场景。目标属性 OUTPUT_NAME 影响安卓上的部署设置,但这些设置是作为结束目标过程的一部分写出的。为了支持使用 CMake 版本低于 3.19,我们通过添加 MANUAL_FINALIZATION 关键字,接管了结束目标的职责。

qt_add_executable(complexapp MANUAL_FINALIZATION complex.cpp)
set_target_properties(complexapp PROPERTIES OUTPUT_NAME Complexify)
qt_finalize_target(complexapp)

警告: 如果您的安卓项目使用 CMake 版本低于 3.19 构建,请确保在顶级 CMakeLists.txt 的末尾调用 qt6_finalize_project()

另请参阅 qt_finalize_target()qt_set_finalizer_mode()qt_add_library()qt_finalize_project()

© 2024 Qt 公司有限公司。本文档中的文档贡献的版权属于各自的所有者。本文档是根据自由软件基金会发布的 GNU 自由文档许可协议 version 1.3 许可的。Qt 和相关的标志是芬兰的 Qt 公司及其在全球的子公司和关联公司拥有的商标。所有其他商标均为各自所有者的财产。