cmake不是qt creator自带的,必须单独安装并添加到系统path,再在kits中手动关联cmake工具、编译器和调试器;新建项目需选non-qt project→plain c++ application with cmake,并在cmakelists.txt中启用automoc/autouic/autorcc及正确find_package(qt6)。

CMake 不是 Qt Creator 自带的,必须单独安装并手动关联,否则新建项目时根本选不到 CMake 构建系统。
确认 CMake 已全局可用
Qt Creator 不会帮你装 CMake,也不会自动识别你下载的压缩包解压路径。它只认 PATH 里能直接调用的 cmake.exe。
- 去 cmake.org/download 下载 Windows Installer(.msi),安装时务必勾选 “Add CMake to the system PATH”
- 打开 PowerShell 或 CMD,运行
cmake --version,看到输出(如3.26.3)才算成功 - 如果提示“不是内部或外部命令”,说明 PATH 没生效——重启终端,或重启 Qt Creator
在 Kits 里绑定 CMake 和编译器
Qt Creator 的 “Kits” 是工具链组合单位,CMake 只是其中一环,它必须和编译器、调试器配对才能工作。常见错误是 CMake 找得到,但 Kit 显示 “No CMake generator available”。
CMake 4.3.2 Windows x86_64 历史版本安装包,适合旧项目兼容、构建环境回退、CMakeLists.txt 迁移验证、Visual Studio/Ninja/Makefile 生成器测试和 C/C++ 项目维护。
- 进入
Tools → Options → Kits → CMake,点击 “Add”,填入cmake.exe的完整路径(例如C:\Program Files\CMake\bin\cmake.exe) - 再进
Kits → Desktop(或你用的 Kit),检查 “CMake Tool” 是否已下拉选择你刚添加的那个 - 同时确认 “Compiler”(如
MinGW 13.1.0 64-bit)和 “Debugger”(如gdb.exe)路径正确且可访问 - 关键点:Kit 名称里带 “Desktop” 的,不代表它一定可用;必须三者(CMake + Compiler + Debugger)全绿勾才真正就绪
新建项目时选对模板,别被 “Qt Widgets Application” 带偏
很多人卡在第一步:新建项目列表里找不到 CMake 选项。这是因为 Qt Creator 把 CMake 项目藏在了非 Qt 分类下。
- 不要选
Application (Qt) → Qt Widgets Application—— 这默认用 qmake - 正确路径是:
File → New File or Project → Non-Qt Project → Plain C++ Application with CMake - 下一步中,“Build system” 会自动显示为
CMake,且灰色不可改 —— 这才是对的 - 如果这里仍是空白或可选 qmake/CMake,说明前面的 Kit 配置没生效,回上一步检查
CMakeLists.txt 里漏掉这三行,Qt 类型就无法自动处理
自动生成的 CMakeLists.txt 很简陋,不加 Qt 特有开关,.ui、.qrc、信号槽这些都不会编译,报错全是 “undefined reference to `vtable for XXX`”。
- 必须加上:
set(CMAKE_AUTOMOC ON)(自动生成 moc 文件) - 加上:
set(CMAKE_AUTOUIC ON)(自动处理 .ui 文件) - 加上:
set(CMAKE_AUTORCC ON)(自动编译 .qrc 资源) - Qt6 项目还要确保
find_package(Qt6 REQUIRED COMPONENTS Widgets)写对,且版本号与你安装的匹配(如Qt6.7.3) - 注意:
find_package后面的模块名大小写敏感,widgets(小写)会失败,必须是Widgets
最容易被忽略的是:Qt Creator 的 Kit 配置页面里,CMake Tool 和 Compiler 必须来自同一套工具链。比如你装了 MinGW,就别让 CMake Tool 指向 MSVC 目录下的 cmake.exe,也别让 Compiler 指向 Qt 安装目录外的另一个 MinGW —— 工具链混用,轻则构建失败,重则生成不可调试的二进制。










