Making Qt available in CMake projects

Currently the only supported method of making Qt available for user projects is by having it pre-installed on the system, or any equivalent workflow that builds Qt ahead of time and makes it available to find_package, such as vcpkg.

When using Qt Creator or qt-cmake (qt-cmake.bat on Windows), the Qt installation location is automatically forwarded to the underlying CMake call.

When using cmake directly, the general search paths used by CMake should cover most non-user installations of Qt. For more control over which Qt package to use, you can pass https://cmake.org/cmake/help/latest/variable/PackageName_ROOT.html Qt6_ROOT as an environment or cache variable pointing to the Qt installation path, or by adding or appending to the CMAKE_PREFIX_PATH in a similar way. For example, if the installation path is "~/Qt/6.9.2/gcc_64", you would pass it on the command line as -DQt6_ROOT=$HOME/Qt/6.9.2/gcc_64.

Note: When cross-compiling (compiling for a platform other than the one you are on, such as WebAssembly or Android) and when using vanilla cmake, set CMAKE_TOOLCHAIN_FILE instead of search paths like Qt6_ROOT or CMAKE_PREFIX_PATH. On Linux, the toolchain file (specific to a particular target platform) is typically located at a path similar to this: "~/Qt/6.9.2/wasm_singlethread/lib/cmake/Qt6/qt.toolchain.cmake". It sets the required variables like CMAKE_PREFIX_PATH, CMAKE_FIND_ROOT_PATH, and QT_HOST_PATH.

cmake_minimum_required(VERSION 3.16)

project(helloworld)

find_package(Qt6 REQUIRED)

The Qt package is split into various modules that you need to include depending on the scope of your project, most basic of which is

find_package(Qt6 REQUIRED COMPONENTS Core)

Modern CMake supports other dependency providers such as FetchContent, however using Qt with FetchContent is not supported due to a tight integration of Qt features inside CMake itself. Adding Qt sources via add_subdirectory and Git submodules is not supported either.

Note: Calling find_package(Qt6) in a subdirectory other than where it is used, or inside a function is not supported. Doing so can cause various failures in unpredictable locations.

Instead, repeatedly call find_package(Qt6) in all subdirectory scopes that use Qt functions, or move the find_package(Qt6) call to the root CMakeLists.txt.

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

OSZAR »