本页内容

qt_standard_project_setup

将项目范围内的默认设置配置为标准布局。

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

find_package(Qt6 REQUIRED COMPONENTS Core)

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

语法

qt_standard_project_setup(
    [REQUIRES <version>]
    [SUPPORTS_UP_TO <version>]
    [I18N_TRANSLATED_LANGUAGES <language...>]
    [I18N_SOURCE_LANGUAGE <language>]
)

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

描述

该命令简化了配置典型 Qt 应用程序的任务。通常应在首次调用 `find_package(Qt6) ` 之后立即调用它,一般位于顶级 `CMakeLists.txt ` 文件中,且在定义任何目标之前。若在后续阶段调用,则不会对之前定义的目标生效,这可能会导致混淆的结果。它执行以下操作:

  • 如果标准 CMake 变量CMAKE_AUTOMOC 和CMAKE_AUTOUIC 尚未被定义,则将其设置为 true。这将默认启用当前目录及其子目录范围内后续创建的所有目标的 Qt 相关 autogen 功能。
  • 自动包含 CMake 的GNUInstallDirs模块。该模块为CMAKE_INSTALL_BINDIR 、CMAKE_INSTALL_LIBDIR 等变量定义了适当的默认值。
  • 当目标平台为 Windows 时,如果CMAKE_RUNTIME_OUTPUT_DIRECTORY 变量尚未设置,则将其设置为${CMAKE_CURRENT_BINARY_DIR} 。
  • 当目标平台不是 Apple 或 Windows 时,CMAKE_INSTALL_RPATH 将按下文所述进行扩展。
  • CMake 的USE_FOLDERS属性将设置为ON ,而QT_TARGETS_FOLDER将设置为QtInternalTargets 。支持文件夹功能的 IDE 将在该文件夹中显示 Qt 内部目标。

自 Qt 6.5 起,可以通过Qt CMake 策略选择采用新版 Qt 的行为变更,从而更改 Qt CMake API 的默认行为。这类似于 CMake 自身的策略概念(参见cmake_policy)。 如果指定了REQUIRES ,则所有在截至REQUIRES (含)的Qt版本中引入的策略将自动设置为NEW ,而使用较旧的Qt版本将导致错误。 例如,指定REQUIRES 6.8 将启用QTP0001至QTP0005的策略。如果同时指定SUPPORTS_UP_TO ,则该版本及之前的策略也将被启用,但无需实际安装该特定Qt版本。

可用的策略如下:

QTP0001

':/qt/qml/' 是 Qml 模块的默认资源前缀

QTP0002

指定 Android 特定路径的目标属性可包含生成器表达式。

QTP0003

创建 Qt 库时,请考虑 BUILD_SHARED_LIBS 的值。

QTP0004

QML 模块中包含 QML 文件的额外目录需要额外的 qmldir 文件

QTP0005

允许 qt_add_qml_module() 依赖关系关键字接受 CMake 目标

QTP0006

将 PRIVATE_CODE 设为 Wayland 协议源代码生成的默认值。

QTP0007

在生成的部署脚本中,对引号和转义字符进行转义处理。

QTP0008

在不重新评估的情况下转发部署脚本的参数。

有关手动设置单个策略的详细信息,请参阅qt_policy()。

在支持RPATH 的平台上(Apple平台除外),此命令会向CMAKE_INSTALL_RPATH 变量追加两个值。追加$ORIGIN ,以便库能在与自身相同的目录中找到其依赖的其他库。同时还会追加$ORIGIN/<reldir> ,其中<reldir> 是从CMAKE_INSTALL_BINDIR 到CMAKE_INSTALL_LIBDIR 的相对路径。这使得安装在CMAKE_INSTALL_BINDIR 的可执行文件能够找到安装在CMAKE_INSTALL_LIBDIR 中的任何依赖库。CMAKE_INSTALL_RPATH 中的任何重复项都会被移除。实际上,这两个值可确保可执行文件和库能够找到其链接时依赖项——前提是项目将它们安装到了install(TARGETS)命令在未显式指定目标时所使用的默认位置。

若要禁用 IDE 的文件夹支持,请在调用 `qt_standard_project_setup` 之前或之后将`USE_FOLDERS`设置为 `OFF `。

通过将QT_NO_STANDARD_PROJECT_SETUP变量设置为 true,可以有效地禁用qt_standard_project_setup() 命令。

国际化

从 Qt 6.7 开始,可以通过I18N_TRANSLATED_LANGUAGES 参数指定用于项目国际化的语言。详情请参阅QT_I18N_TRANSLATED_LANGUAGES。

使用 I18N_SOURCE_LANGUAGE 指定可翻译字符串的源语言。默认情况下,使用en 。详情请参阅QT_I18N_SOURCE_LANGUAGE。

示例

cmake_minimum_required(VERSION 3.16...3.22)
project(MyThings)

find_package(Qt6 REQUIRED COMPONENTS Core)
qt_standard_project_setup()

qt_add_executable(MyApp main.cpp)

install(TARGETS MyApp
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

qt_generate_deploy_app_script(
    TARGET MyApp
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})

另请参阅 qt_generate_deploy_app_script()、qt_policy() 和qt_add_translations()。

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