- Qt 6.11
- Qt Core
- CMake Commands in Qt6 Core
- qt_standard_project_setup
- Qt 6.11.1 Reference Documentation

# qt_standard_project_setup

Setup project-wide defaults to a standard arrangement.

The command is defined in the `Core` component of the `Qt6` package, which can be loaded like so:

     find_package(Qt6 REQUIRED COMPONENTS Core)

This command was introduced in Qt 6.3.

## Synopsis

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

If versionless commands are disabled, use `qt6_standard_project_setup()` instead. It supports the same set of arguments as this command.

## Description

This command simplifies the task of setting up a typical Qt application. It would usually be called immediately after the first `find_package(Qt6)` call, normally in the top level `CMakeLists.txt` file and before any targets have been defined. If you call it later, it does not apply to any targets defined before, with possibly confusing results. It does the following things:

- The standard CMake variables `CMAKE_AUTOMOC` and `CMAKE_AUTOUIC` are set to true if they are not already defined. This enables all Qt-related autogen features by default for subsequently created targets in the current directory scope and below.
- CMake's GNUInstallDirs module is automatically included. This defines appropriate defaults for variables like `CMAKE_INSTALL_BINDIR`, `CMAKE_INSTALL_LIBDIR`, and so on.
- When targeting Windows, if the `CMAKE_RUNTIME_OUTPUT_DIRECTORY` variable is not already set, it will be set to `${CMAKE_CURRENT_BINARY_DIR}`.
- When target platforms other than Apple or Windows, `CMAKE_INSTALL_RPATH` will be augmented as described below.
- CMake's USE_FOLDERS property is set to `ON`, and QT_TARGETS_FOLDER is set to `QtInternalTargets`. IDEs that support folders will display Qt-internal targets in this folder.

Since Qt 6.5, it is possible to change the default behavior of Qt's CMake API by opting in to behavior changes from newer Qt versions via Qt CMake policies. This is similar to CMake's own policy concept (compare cmake_policy). If `REQUIRES` is specified, all policies introduced in Qt versions up to and including `REQUIRES` are automatically set to `NEW`, and using an older Qt version will result in an error. For example, specifying `REQUIRES 6.8` enables policies QTP0001 through QTP0005. If `SUPPORTS_UP_TO` is also specified, policies up to that version are enabled as well, but without requiring that particular Qt version to be present.

The following policies are available:

QTP0001 | ':/qt/qml/' is the default resource prefix for QML modules
QTP0002 | Target properties that specify Android-specific paths may contain generator expressions.
QTP0003 | Consider the BUILD_SHARED_LIBS value when creating Qt libraries.
QTP0004 | Extra directories with QML files in a QML module need extra qmldir files
QTP0005 | Qt_add_qml_module dependency keywords accept CMake targets

See qt_policy for details on manually setting individual policies.

On platforms that support `RPATH` (other than Apple platforms), two values are appended to the `CMAKE_INSTALL_RPATH` variable by this command. `$ORIGIN` is appended so that libraries will find other libraries they depend on in the same directory as themselves. `$ORIGIN/<reldir>` is also appended, where `<reldir>` is the relative path from `CMAKE_INSTALL_BINDIR` to `CMAKE_INSTALL_LIBDIR`. This allows executables installed to `CMAKE_INSTALL_BINDIR` to find any libraries they may depend on installed to `CMAKE_INSTALL_LIBDIR`. Any duplicates in `CMAKE_INSTALL_RPATH` are removed. In practice, these two values ensure that executables and libraries will find their link-time dependencies, assuming projects install them to the default locations the install(TARGETS) command uses when no destination is explicitly provided.

To disable folder support for IDEs, set USE_FOLDERS to `OFF` before or after the call to `qt_standard_project_setup`.

The `qt_standard_project_setup()` command can effectively be disabled by setting the QT_NO_STANDARD_PROJECT_SETUP variable to true.

## Internationalization

Since Qt 6.7, it is possible to specify the languages that are used for project internationalization with the `I18N_TRANSLATED_LANGUAGES` argument. See QT_I18N_TRANSLATED_LANGUAGES for details.

Use I18N_SOURCE_LANGUAGE to specify the language that translatable strings are written in. By default, `en` is used. See QT_I18N_SOURCE_LANGUAGE for details.

## Example

     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})

See also qt_generate_deploy_app_script(), qt_policy, and qt_add_translations().