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
库,任何 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 时尤其重要,是为了收集在部署过程中的项目目标之间的依赖项。
示例
在以下简单情况下,结束过程会自动处理。如果使用 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 公司及其在全球的子公司和关联公司拥有的商标。所有其他商标均为各自所有者的财产。