- Qt 6.7
- Qt Core
- CMake Commands in Qt6 Core
- qt_standard_project_setup
- Qt 6.7.0 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_LANGUAGES <language...>]
         [I18N_NATIVE_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. 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 changes from newer Qt versions. If `REQUIRES` is specified, all suggested changes introduced in Qt up to `REQUIRES` are enabled, and using an older Qt version will result in an error. If additionally `SUPPORTS_UP_TO` has been specified, any new changes introduced in versions up to `SUPPORTS_UP_TO` are also enabled (but using an older Qt version is not an error). This is similar to CMake's policy concept (compare cmake_policy).

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_LANGUAGES` argument. See QT_I18N_LANGUAGES for details.

Use I18N_NATIVE_LANGUAGE to specify the native language that translatable strings are written in. See QT_I18N_NATIVE_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() and qt_policy.