本页内容

在命令行上构建项目

本页介绍如何配置和构建现有项目。如果您想了解如何创建基于 Qt 的 CMake 项目,请参阅CMake 入门文档。

要构建 Qt 项目,CMake 需要知道 Qt 的安装位置。通常通过将 CMake 变量CMAKE_PREFIX_PATH设置为 Qt 的安装前缀来实现。如果您正在进行交叉编译,请参阅“交叉编译”部分,了解需要设置的其他变量的详细信息。

如果通过Qt Online Installer 安装了 Qt,请在顶级安装目录中选择一个 Qt 版本。例如,以下命令展示了在 Windows 系统上的操作方法:

cmake -DCMAKE_PREFIX_PATH=C:\Qt\6.12.0\msvc2022_64 -S <source-dir> -B <build-dir>

占位符<source-dir> 和<build-dir> 分别代表项目的源代码目录和构建目录。

CMake 生成器

CMake 会生成必要的构建系统文件,使 GNU Make 或 Ninja 等构建工具能够构建您的项目。

CMake 的默认生成器取决于平台和构建环境。例如在 Windows 上,如果检测到 Visual Studio 环境,CMake 会生成 Visual Studio 项目文件。

为了在所有平台上获得一致的开发者体验,请使用Ninja 或Ninja Multi-Config 生成器。

您可以通过设置CMAKE_GENERATOR 环境变量或使用-G 参数来选择CMake生成器:

cmake -G Ninja ...

qt-cmake

qt-cmake 脚本是配置项目的便捷替代方案。它免去了您指定 `CMAKE_PREFIX_PATH` 的需要。您可以在 Qt 安装前缀的 `bin ` 目录中找到该脚本。该脚本会将所有参数传递给 CMake,因此您可以像使用 `cmake` 一样使用它:

C:\Qt\6.12.0\msvc2022_64\bin\qt-cmake -G Ninja -S <source-dir> -B <build-dir>

生成构建系统文件后,您的项目即可开始构建:

cd <build-dir>
ninja

您也可以使用与生成器无关的 CMake 命令:

cmake --build <build-dir>

交叉编译

为与开发机不同的平台构建项目称为交叉编译。例如,在 Windows 机器(主机平台)上为 Android(目标平台)进行构建。

使用 CMake 进行交叉编译时,大多数平台都需要一个工具链文件。此外,除了目标平台的 Qt 版本外,还需安装开发主机的 Qt 版本。例如,要在 Windows 上为 Android 进行交叉编译,则需要同时安装 Windows 版 Qt 和 Android 版 Qt。

请使用目标平台 Qt 安装目录下的 `qt-cmake `,对项目进行针对该平台的交叉编译:

<target-qt>/bin/qt-cmake -S <source-dir> -B <build-dir>

这将根据目标平台配置您的项目。工具链文件会自动传递,同时可能会设置其他特定于该平台的变量。

指定自定义工具链文件

qt-cmake 脚本会向 CMake 传递一个 Qt 内部的工具链文件。该工具链文件会设置若干特定于 Qt 目标平台的变量。

如果您使用的 Qt 安装包并非在您的机器上构建的,则qt-cmake 需要知道目标平台 CMake 工具链文件的位置。

在这种情况下,您可以通过设置QT_CHAINLOAD_TOOLCHAIN_FILE 变量,指示qt-cmake 链式加载自定义工具链文件:

~/Qt/6.12.0/android_armv7/bin/qt-cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=<file-path> -S <source-dir> -B <build-dir>

这将指示 Qt 的内部工具链文件同时加载您的自定义工具链文件。

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