
简介本资源为CMake 3.28.6官方Windows x64版本完整安装包面向C开发者、跨平台项目构建工程师及CI/CD流程搭建人员用于替代旧版或离线部署最新稳定版构建工具。压缩包内含2000个文件以1171个文本文档含配置说明、环境变量设置指引、常见错误解析和829个HTML手册页覆盖cmake命令行、生成器表达式、CTest测试框架、预设文件presets、文件API、构建系统规范等核心模块为主结构完整、文档齐备可直接解压即用无需额外安装。资源大小43.06MB轻量高效适配主流Windows开发环境。目前已有400人学习下载读者可获得开箱即用的权威构建工具、全量离线帮助文档、标准化目录组织含索引页与模块化手册便于快速查阅语法细节、调试构建逻辑、验证生成器行为是本地开发、教学演示及自动化构建脚本开发的重要支撑材料。1. CMake 3.28.6 Windows x86_64 官方二进制包不是“装个GUI就完事”的玩具而是你构建 C 项目时绕不开的底层调度中枢你写完CMakeLists.txt双击cmake-gui.exe点几下 Configure/Generate以为工程就建好了——结果ninja: error: loading build.ninja: No such file or directory或者用 Visual Studio 打开生成的.sln编译报错LNK1104: cannot open file libboost_system-vc143-mt-x64-1_83.lib但你根本没在find_package(Boost)里指定版本更没搞懂CMAKE_MSVC_RUNTIME_LIBRARY是怎么把/MDd和/MT混在一起炸掉链接器的。这不是你代码的问题是你手里的 CMake 不够“干净”、不够“可控”。cmake-3.28.6-windows-x86_64.zip就是那个能让你甩开 VS Installer 自带陈旧版本3.21.x、绕过 Chocolatey 包管理器玄学依赖、直接落地到C:\Program Files\CMake\bin的官方原生二进制包。它不含 GUIcmake-gui.exe是附带的但默认不注册系统 PATH不捆绑任何编译器也不自动改 registry——它只做一件事把你的CMakeLists.txt精准翻译成 Ninja/MSBuild/MinGW Makefile 的中间指令。适合三类人需要稳定复现 CI 构建环境的嵌入式工程师、被 Qt Creator 内置 CMake 版本卡死在 3.22 的跨平台开发者、以及正在为add_compile_definitions()和target_compile_definitions()切换而翻车的 C20 项目维护者。2. 解压即用为什么必须手动配置 PATH而不是双击安装2.1 文件结构解剖bin/是唯一可信路径doc/是调试黑匣子的后悔药解压cmake-3.28.6-windows-x86_64.zip后你会看到如下核心目录结构cmake-3.28.6-windows-x86_64/ ├── bin/ │ ├── cmake.exe ← 主程序命令行入口 │ ├── cpack.exe ← 打包工具生成 NSIS/ZIP/7z 安装包 │ ├── ctest.exe ← 单元测试驱动器配合 add_test() 使用 │ └── cmake-gui.exe ← 图形界面依赖 Qt5但不自带 Qt DLL ├── doc/ │ ├── cmake.1.html ← man cmake 的 HTML 版Windows 下 cmake --help 无法显示完整手册 │ ├── cmake-buildsystem.7.html ← 构建系统语义详解add_library() 作用域、PRIVATE/PUBLIC/INTERFACE 传递规则 │ ├── cmake-generator-expressions.7.html ← $CONFIG、$TARGET_FILE:xxx 等生成器表达式权威文档 │ └── index.html ← 文档首页离线可用无需联网 └── share/ ← 模块库FindXXX.cmake、CMakePackageConfigHelpers.cmake 等 └── cmake-3.28/ └── Modules/提示doc/目录下的.html文件是离线调试的救命稻草。当你遇到CMake Error at CMakeLists.txt:42 (target_link_libraries): Cannot specify link interface for target mylib which is not built in this source directory这类报错时直接打开cmake-buildsystem.7.html搜索target_link_libraries INTERFACE比 Stack Overflow 上的碎片答案快 3 倍。2.2 PATH 配置实操拒绝choco install cmake坚持手动注入Windows 下 CMake 的 PATH 注入必须满足两个硬性条件cmake.exe所在目录如C:\cmake-3.28.6-win64-x64\bin必须加入系统级 PATH非用户级否则 GitHub Actions 或 Jenkins Agent 无法识别不能与旧版 CMake如 VS2022 自带的 3.21.2共存于同一 PATH 位置否则where cmake会返回多个路径导致cmake --version输出不可信。操作步骤管理员权限 PowerShell# 1. 创建永久安装目录避免中文路径和空格 New-Item -Path C:\cmake-3.28.6-win64-x64 -ItemType Directory -Force # 2. 解压 zip 到该目录假设 zip 在 Downloads Expand-Archive -Path $env:USERPROFILE\Downloads\cmake-3.28.6-windows-x86_64.zip -DestinationPath C:\cmake-3.28.6-win64-x64 -Force # 3. 将 bin 目录追加到系统 PATH注意必须用 [Environment]::SetEnvironmentVariable而非 $env:PATH $oldPath [Environment]::GetEnvironmentVariable(Path, Machine) $newPath C:\cmake-3.28.6-win64-x64\bin; $oldPath [Environment]::SetEnvironmentVariable(Path, $newPath, Machine) # 4. 验证新开一个 CMD 或 PowerShell cmake --version # 必须输出 3.28.6且无警告参数说明-Force防止因目录已存在而中断[Environment]::SetEnvironmentVariable(Path, ..., Machine)是关键——它修改的是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path确保所有服务进程包括 Git Bash、WSL2 的 Windows interop都能继承where cmake应只返回一行C:\cmake-3.28.6-win64-x64\bin\cmake.exe。3. 构建实战用 CMake 3.28.6 正确驱动 MSVC 2022 和 MinGW-w643.1 MSVC 2022-A x64不再是默认-T hostx64成为稳定锚点CMake 3.28 强化了对 Visual Studio 2022 v17.8 的 generator 行为控制。旧写法cmake -G Visual Studio 17 2022会默认生成 Win32 平台项目即使你在 x64 命令行中运行导致LINK : fatal error LNK1104: cannot open file kernel32.lib。正确姿势是显式绑定架构# ✅ 正确强制 host 和 target 均为 x64避免混用 x86 工具链 cmake -S . -B build-msvc -G Visual Studio 17 2022 -A x64 -T hostx64 # ✅ 更推荐使用 Ninja启动快、增量构建准搭配 MSVC 工具链 cmake -S . -B build-ninja -G Ninja -DCMAKE_BUILD_TYPERelWithDebInfo -T hostx64关键参数解析-A x64指定 target architecture影响CMAKE_SIZEOF_VOID_P和CMAKE_SYSTEM_PROCESSOR-T hostx64指定 host toolchain architecture决定cl.exe调用路径避免vcvarsall.bat自动降级到 x86-DCMAKE_BUILD_TYPERelWithDebInfo对 Ninja generator 必需VS generator 可省略因其通过 ConfigurationName 控制-G NinjaCMake 3.28 对 Ninja 的build.ninja生成逻辑做了缓存优化ninja -t deps输出更准确。3.2 MinGW-w64-G MinGW Makefiles已淘汰-G Ninja Multi-Config是新标准CMake 3.28 彻底弃用MinGW Makefilesgenerator其make依赖 GNU Make且无法处理add_compile_options(-marchnative)的跨平台兼容。取而代之的是# ✅ 正确使用 Ninja MinGW-w64 工具链文件toolchain file cmake -S . -B build-mingw -G Ninja Multi-Config \ -DCMAKE_TOOLCHAIN_FILEC:/msys64/mingw64/share/cmake/toolchain/mingw64.cmake \ -DCMAKE_BUILD_TYPEReleasetoolchain file 示例mingw64.cmake关键片段set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_C_COMPILER C:/msys64/mingw64/bin/gcc.exe) set(CMAKE_CXX_COMPILER C:/msys64/mingw64/bin/g.exe) set(CMAKE_FIND_ROOT_PATH C:/msys64/mingw64) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # 不在 root path 查找可执行文件 set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # 只在 root path 查找库 set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # 只在 root path 查找头文件注意CMAKE_FIND_ROOT_PATH_MODE_*三参数是 MinGW 构建不链接到C:\Windows\System32下user32.lib的核心防线。漏设会导致undefined reference to __imp__MessageBoxA16。4. 避坑指南CMake 3.28.6 在 Windows 上的五个血泪经验4.1 现象CMake Error: The source directory .../src does not appear to contain CMakeLists.txt原因CMake 3.28 默认启用CMP0148策略要求CMakeLists.txt必须位于-S指定目录的根目录禁止cmake -S src -B build这种写法。解决在CMakeLists.txt开头添加cmake_policy(SET CMP0148 NEW) # 允许 -S 指向子目录 # 或临时禁用策略不推荐 # cmake_policy(SET CMP0148 OLD)4.2 现象CMake Warning: Manually-specified variables were not used by the project: CMAKE_CXX_FLAGS原因CMake 3.28 强化了CMAKE_CXX_FLAGS的废弃警告应改用target_compile_options()或add_compile_options()。解决将全局标志迁移至 target 级别# ❌ 旧写法触发警告 set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} /std:c20 /permissive-) # ✅ 新写法无警告 add_compile_options(/std:c20 /permissive-) # 或更推荐 target_compile_options(my_target PRIVATE /std:c20 /permissive-)4.3 现象Ninja: error: build.ninja:1234: bad $ escape原因CMakeLists.txt中使用了未转义的$符号如set(VERSION v1.$ENV{BUILD_NUMBER})CMake 3.28 的 Ninja backend 对$解析更严格。解决双写$或改用string(CONFIGURE)# ❌ 错误 set(VER v1.$ENV{BUILD_NUMBER}) # ✅ 正确转义 set(VER v1.$$ENV{BUILD_NUMBER}) # ✅ 更健壮延迟展开 string(CONFIGURE v1.\${BUILD_NUMBER} VER ONLY)4.4 现象CMake Error: install(EXPORT mytargets ...) includes target mylib which requires a target export set原因install(EXPORT)要求所有被导出的 target 必须先通过export(TARGETS ... FILE ...)注册CMake 3.28 对此校验更严格。解决在install(EXPORT)前补全 export# 必须先 export target 到文件 export(TARGETS mylib FILE ${CMAKE_BINARY_DIR}/mylib-targets.cmake) # 再 install export install(EXPORT mytargets FILE mylib-config.cmake NAMESPACE mylib:: DESTINATION lib/cmake/mylib)4.5 现象CMake Warning: Manually-specified variables were not used by the project: CMAKE_INSTALL_PREFIX原因CMAKE_INSTALL_PREFIX是 cache 变量但若CMakeLists.txt中未调用install()命令CMake 3.28 会明确警告其未被消费。解决确认install()存在或显式设置CMAKE_SKIP_INSTALL_ALL_DEPENDENCYON仅调试用cmake -S . -B build -DCMAKE_INSTALL_PREFIXC:/myproject/install -DCMAKE_SKIP_INSTALL_ALL_DEPENDENCYON5. 进阶技巧用cmake-file-api实现 IDE 无感同步告别手动生成5.1 什么是 CMake File API——让 VS Code/CLion/Qt Creator 直接读取构建图谱CMake 3.28 的cmake-file-api不是替代cmake-gui的图形工具而是提供 JSON-RPC 接口让 IDE 绕过cmake命令行调用直接解析build/目录下的codemodel-v2文件获取所有target的源文件列表、编译选项、包含路径target_link_libraries()的精确依赖链含INTERFACE传递configure_file()生成的头文件路径add_custom_target()的执行命令与工作目录。启用方式无需修改 CMakeLists.txt# 1. 创建 build 目录并初始化 File API cmake -S . -B build -G Ninja # 2. 触发 File API 生成生成 codemodel-v2 目录 cmake -B build --fresh # 3. 查看生成的 JSONVS Code CMake Tools 插件自动读取此路径 ls build/.cmake/api/v1/reply/ # 输出类似codemodel-v2-xxxxx.json, cache-v2-xxxxx.json5.2 手动解析 codemodel-v2定位target_compile_definitions()的实际生效位置当target_compile_definitions(mylib PRIVATE MYLIB_LOG_LEVEL3)不生效时GUI 工具只能显示“已设置”而codemodel-v2能告诉你它到底被插到了哪一行编译命令里# 解析 codemodel-v2-*.json用 jq jq .configurations[0].projects[0].targets[] | select(.namemylib) | .compileGroups[0].defines build/.cmake/api/v1/reply/codemodel-v2-*.json输出示例[MYLIB_LOG_LEVEL3, CMAKE_BUILD_TYPE\RelWithDebInfo\]这证明定义已注入若仍不生效问题必在头文件未#include mylib/config.hMYLIB_LOG_LEVEL被后续#undef覆盖target_compile_definitions()作用域错误PRIVATE不会传递给依赖者。5.3 验证 CMake 版本兼容性用cmake-presets.json锁定构建环境CMake 3.28 强制要求cmake-presets.json中的version字段必须 ≥ 3否则cmake --list-presets报错。一个生产级 preset 示例{ version: 4, configurePresets: [ { name: win-msvc-release, displayName: Windows MSVC Release, description: Build with Visual Studio 2022 x64, generator: Visual Studio 17 2022, binaryDir: ${sourceDir}/build-msvc-release, cacheVariables: { CMAKE_BUILD_TYPE: RelWithDebInfo, CMAKE_TOOLCHAIN_FILE: }, condition: { type: equals, lhs: ${hostSystemName}, rhs: Windows } } ] }验证命令cmake --list-presets # 列出可用 preset cmake --preset win-msvc-release # 一键生成自动处理 -S/-B/-G cmake --build --preset win-msvc-release # 一键构建自动选择 build dir从那以后我每次新建 C 项目都先写cmake-presets.json再动CMakeLists.txt——不是为了炫技而是因为--preset能让实习生、外包、CI 流水线用同一串命令跑通彻底消灭 “在我机器上是好的” 这句万能甩锅话。希望帮到你。本文还有配套的精品资源点击获取