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. It does the following things:
- The standard CMake variables
CMAKE_AUTOMOC
andCMAKE_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 toQtInternalTargets
. 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_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().