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()
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_AUTOMOCandCMAKE_AUTOUICare 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_DIRECTORYvariable is not already set, it will be set to${CMAKE_CURRENT_BINARY_DIR}. - When target platforms other than Apple or Windows,
CMAKE_INSTALL_RPATHwill be augmented as described below.
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.
The qt_standard_project_setup() command can effectively be disabled by setting the QT_NO_STANDARD_PROJECT_SETUP variable to true.
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)
set_target_properties(MyApp PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
# App bundles on macOS have an .app suffix
if(APPLE)
set(executable_path "$<TARGET_FILE_NAME:MyApp>.app")
else()
set(executable_path "\${QT_DEPLOY_BIN_DIR}/$<TARGET_FILE_NAME:MyApp>")
endif()
# Helper app, not necessarily built as part of this project.
qt_add_executable(HelperApp helper.cpp)
set(helper_app_path "\${QT_DEPLOY_BIN_DIR}/$<TARGET_FILE_NAME:HelperApp>")
# The following script must only be executed at install time
set(deploy_script "${CMAKE_CURRENT_BINARY_DIR}/deploy_MyApp.cmake")
file(GENERATE OUTPUT ${deploy_script} CONTENT "
# Including the file pointed to by QT_DEPLOY_SUPPORT ensures the generated
# deployment script has access to qt_deploy_runtime_dependencies()
include(\"${QT_DEPLOY_SUPPORT}\")
qt_deploy_runtime_dependencies(
EXECUTABLE \"${executable_path}\"
ADDITIONAL_EXECUTABLES \"${helper_app_path}\"
GENERATE_QT_CONF
VERBOSE
)")
# Omitting RUNTIME DESTINATION will install a non-bundle target to CMAKE_INSTALL_BINDIR,
# which coincides with the default value of QT_DEPLOY_BIN_DIR used above, './bin'.
# Installing macOS bundles always requires an explicit BUNDLE DESTINATION option.
install(TARGETS MyApp HelperApp # Install to CMAKE_INSTALL_PREFIX/bin/MyApp.exe
# and ./binHelperApp.exe
BUNDLE DESTINATION . # Install to CMAKE_INSTALL_PREFIX/MyApp.app/Contents/MacOS/MyApp
)
install(SCRIPT ${deploy_script}) # Add its runtime dependenciesSee also qt_generate_deploy_app_script().
© 2023 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.