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 之外的所有平台上,都将创建一个可执行的目标。除了MANUAL_FINALIZATION (如果存在),所有参数都将传递给标准 CMakeadd_executable() 命令。在 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 或更高版本时,目标最终确定会自动推迟到当前目录作用域的末尾。这样,调用者就有机会在目标最终完成前修改已创建目标的属性。使用早于 3.19 版本的 CMake 时,不支持自动延迟。在这种情况下,目标会在此命令返回前立即最终化。

无论 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 目标属性会影响 Android 上的部署设置,但这些设置会在最终确定目标时写出。为了支持使用早于 3.19 版本的 CMake,我们通过添加MANUAL_FINALIZATION 关键字来接管最终确定目标的责任。

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

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

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

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