// Copyright (C) 2025 The Qt Company Ltd
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only

/*!
    \page cmake-making-qt-available.html
    \title Making Qt available in CMake projects
    \brief Provides an overview of how to make Qt's packages 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
    \l {https://cmake.org/cmake/help/latest/command/find_package.html} {\c find_package}, such as
    \c{vcpkg}.

    When using \l{\QC Documentation}{\QC} or \c{qt-cmake} (\c{qt-cmake.bat} on Windows),
    the Qt installation location is automatically forwarded to the underlying CMake call.

    When using \c{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
    \l{https://cmake.org/cmake/help/latest/variable/PackageName_ROOT.html}
    \c{Qt6_ROOT} as an environment or cache variable pointing to the Qt installation path, or by
    adding or appending to the \c{CMAKE_PREFIX_PATH} in a similar way. For
    example, if the installation path is \tt{"~/Qt/\QtVersion/gcc_64"}, you would pass it on the
    command line as \tt{-DQt6_ROOT=$HOME/Qt/\QtVersion/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 \c{cmake},
    set \c{CMAKE_TOOLCHAIN_FILE} instead of search paths like \c{Qt6_ROOT} or \c{CMAKE_PREFIX_PATH}.
    On Linux, the toolchain file (specific to a particular target platform) is typically
    located at a path similar to this:
    \tt{"~/Qt/\QtVersion/wasm_singlethread/lib/cmake/Qt6/qt.toolchain.cmake"}. It sets
    the required variables like \c{CMAKE_PREFIX_PATH}, \c{CMAKE_FIND_ROOT_PATH},
    and \c{QT_HOST_PATH}.

    \quotefromfile snippets/cmake/import_qt_minimal.cmake
    \skipto cmake_minimum_required
    \printuntil

    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

    \quotefromfile snippets/cmake/helloworld_qtcore.cmake
    \skipto find_package
    \printuntil find_package

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

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

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