本页内容

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 以外的所有平台上,将创建一个可执行目标。所有参数都将传递给标准的 CMakeadd_executable() 命令,但MANUAL_FINALIZATION (如果存在)除外。在 Android 上,将创建一个MODULE 库,并且任何WIN32 或MACOSX_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 时,这一点尤为重要,以便为部署目的收集项目目标之间的依赖关系。

示例

在下面的简单示例中,最终化会自动处理。如果使用的是早于 3.19 的 CMake 版本,最终化将在调用过程中立即执行。当使用 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 文件末尾调用qt_finalize_project()。

另请参阅 qt_finalize_target()、qt_set_finalizer_mode()、qt_add_library() 和qt_finalize_project()。

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