在命令行上构建项目

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

要构建 Qt 项目,CMake 需要知道 Qt 安装的位置。通常可通过将 CMake 变量CMAKE_PREFIX_PATH设置为 Qt 的安装前缀来实现。如果要交叉编译,请参阅交叉编译,了解需要设置的其他变量。

如果使用Qt Online Installer 安装 Qt,请在顶层安装目录中选择 Qt 版本。例如,以下命令显示了在 Windows 上的操作方法:

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

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

CMake 生成器

CMake 生成必要的编译系统文件,以便 GNU Make 或 Ninja 等编译工具能编译你的项目。

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

要在所有平台上获得一致的开发体验,请使用NinjaNinja Multi-Config 生成器。

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

cmake -G Ninja ...

qt-cmake

qt-cmake 脚本是配置项目的便捷选择。它无需你指定CMAKE_PREFIX_PATH 。你可以在 Qt 安装前缀的bin 目录中找到它。脚本会将所有参数传递给 CMake,因此您可以像使用cmake 一样使用它:

C:\Qt\6.9.1\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.9.1/android_armv7/bin/qt-cmake -DQT_CHAINLOAD_TOOLCHAIN_FILE=<file-path> -S <source-dir> -B <build-dir>

这将指示 Qt 的内部工具链文件也加载你的自定义工具链文件。

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