CMake 3.26.6 Windows免安装版:从解压配置到Visual Studio工程生成全指南
2026/9/13 2:03:37 网站建设 项目流程

简介:面向Windows 64位平台的CMake 3.26.6离线手册,收录了随版本发布的完整文档资源,适合需要配置构建系统、使用生成器表达式、管理预设或调试CMake脚本的开发者查阅。包内共2000个文件,其中806个HTML网页文档覆盖命令参考、构建系统说明、文件API介绍、变量列表等章节,1194个TXT文本便于在终端中快速检索关键字,二者组合提供灵活的离线阅读方式,压缩包整体约39.99MB。内容以官方手册为骨架,从cmake命令到ctest测试工具均有涉及,生成器表达式与变量作用域等关键主题也有系统说明,可作为日常开发中的速查手册。已有295人学习下载,特别适合无外网环境下的C++项目构建实践与排错参考。

1. 为什么是 cmake-3.26.6-windows-x86_64.zip 这个包

cmake-3.26.6-windows-x86_64.zip看一眼文件名,就能读出三条关键信息:CMake 3.26.6、Windows 平台、x86_64 架构。它和 .msi 安装包最大的区别是免安装——不用管理员权限,不用走安装向导,解压后 bin 目录下的 cmake.exe 就是可用的完整程序,不写注册表,删目录即卸载。对经常需要在多个 CMake 版本之间切换、在 CI 镜像里预置构建工具或者往离线机器拷贝开发环境的人来说,这个性质很值钱。

3.26.6 是 3.26 分支中一个成熟稳定的补丁版本,在功能上比 3.25 更完整,又避开了后续大版本里伴随的新策略切换成本,所以很多生产项目会把版本锁定在 3.26.6,用 zip 形态分发到各个 Windows 构建节点。下面按真实落地顺序来:先校验下载,再配环境,然后用它生成 Visual Studio 工程,最后把参数固化到配置预设里。

2. 下载、校验与解压 cmake-3.26.6-windows-x86_64.zip

2.1 官方下载页面与 zip 文件名识别

在 CMake 官方下载页面 cmake.org/download 的 Binary Distributions 区域,Windows 平台下列出了 64 位和 32 位两类条目,每一类又分 MSI 与 ZIP。选择Windows x86_64 ZIP,拿到的就是标题里这个文件。文件名各部分含义如下:

组成含义实际影响
cmake官方统一前缀
3.26.6主版本.次版本.patch3.26 分支的成熟补丁版
windows目标操作系统只能在 Windows NT 系使用
x86_64目标 CPU 架构要求 64 位 Windows
zip打包方式免安装,解压即用

为什么推荐 zip 而不是 msi?msi 安装器会写注册表、创建卸载项,还会在开始菜单里放快捷方式;而 zip 版解压出来只有cmake-3.26.6-windows-x86_64这一个顶层目录。想同时用 3.26.6 和 3.28.0 时,zip 可以各占一个目录,通过 PATH 顺序切换,不会互相覆盖。CI 节点上先解压 zip 再弹入 PATH,也比静默安装 msi 更可控,少一次 Administrator 权限申请。

2.2 用 PowerShell 校验 SHA-256

下载管理器偶尔会截断文件,镜像站也可能同步出错。官方下载页面为每个文件公布了 SHA-256,不要省略这一步。在 PowerShell 里进入 zip 所在目录执行:

Get-FileHash .\cmake-3.26.6-windows-x86_64.zip -Algorithm SHA256

输出是一行 64 位十六进制字符串,在官网对应文件后面找同样的值即可。老系统没有Get-FileHash时,改用certutil -hashfile cmake-3.26.6-windows-x86_64.zip SHA256,输出格式稍有差异,但对齐一遍就能确认。这里要留意的是,内网安全软件有时会在下载完成前的最后阶段锁文件,导致哈希不匹配且诡异的是解压也能成功一部分,最后使用时才报“找不到 cmake.exe”,所以校验放在解压之前,能省很多无头绪的排查。

2.3 解压到目标目录并配置 PATH

校验通过后,把 zip 解压到统一工具目录,例如C:\Tools

Expand-Archive .\cmake-3.26.6-windows-x86_64.zip -DestinationPath C:\Tools

Expand-Archive-DestinationPath指定目标根目录,解压后实际路径会带着内层目录名。接着将bin目录写入当前用户的 PATH:

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Tools\cmake-3.26.6-windows-x86_64\bin", "User")

第三参数"User"表示用户级环境变量,不污染系统级配置,也不需要管理员权限。注意当前已经打开的终端窗口不会自动刷新,新开一个 cmd 或 PowerShell 再执行cmake --version验证。若是在脚本里做一次性调用,可以用$env:Path = "C:\Tools\cmake-3.26.6-windows-x86_64\bin;" + $env:Path先临时刷新,再把后续命令串到同一进程。

3. 用 cmake-3.26.6 配置与生成 Visual Studio 工程的关键参数

解压安装只是拿到命令行工具,真正依赖它的是“配置”和“生成”两个阶段。CMake 在学习初期最容易忽略一个事实:它本身不编译代码,而是生成给编译器或构建系统用的工程文件。Windows 上最常见的生成对象就是 Visual Studio 的.sln

3.1 最小配置命令和生成器选择

假设项目根目录有 CMakeLists.txt,一条最小且完整的配置命令是:

cmake -S . -B build -G "Visual Studio 17 2022" -A x64

-S .指向源码根,-B build指定构建目录,-G选择生成器,-A选择架构。运行之后build目录里会出现.sln和各个.vcxproj。CMake 3.26.6 对 Visual Studio 16 2019 和 17 2022 都支持,下面是常用的对应表:

生成器名称对应 VS 版本默认工具集
Visual Studio 16 2019VS 2019v142
Visual Studio 17 2022VS 2022v143

没有 Visual Studio 而是用 MinGW 的话,生成器要换成-G "MinGW Makefiles",但这样就没有.sln,而是 Makefile,后续用cmake --build .mingw32-make构建。选择生成器的依据不是哪个新用哪个,而是本机装了哪个 VS 以及项目是否依赖特定 MSVC 版本;同一条命令在 32 位机器上还需要把-A x64改成-A Win32,否则 configure 阶段会直接报平台不匹配。

3.2 去掉 Debug/Release 输出路径的写法

VS 生成器的默认行为是每种配置一个子目录,Debug 编译产出的 exe 在build\Debug,Release 在build\Release。这种布局对调试没问题,但自动化脚本打包时常要猜路径。可以把输出路径统一到build\bin,在 CMakeLists.txt 里写:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/bin")

CMAKE_RUNTIME_OUTPUT_DIRECTORY对应 EXE 和 DLL 的通用输出目录,带_DEBUG_RELEASE后缀的变量会覆盖通用值。三行都写的原因很直接:VS 生成器在配置阶段会按不同CMAKE_CONFIGURATION_TYPES复制缓存变量,只写通用项时某些配置仍然会落到各自的子目录。类似地还有CMAKE_LIBRARY_OUTPUT_DIRECTORYCMAKE_ARCHIVE_OUTPUT_DIRECTORY,分别控制 DLL/加载库和静态库/导入库的落点,需要时按同一套路设置。

3.3 预编译库的 CMAKE_PREFIX_PATH 写法

引入第三方预编译库时,CMake 的find_package需要知道去哪找包配置文件。最常见的做法是使用CMAKE_PREFIX_PATH前缀路径变量。例如有一个 Qt 或 OpenCV 预编译包,配置命令写成:

cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH=C:/SDK/mylibrary-2.0

注意路径里用正斜杠,CMake 在解析C:\SDK\...时会把\S当作转义序列,虽然不会直接报错,但展开后可能得到错误的路径。多个前缀用分号分隔:-DCMAKE_PREFIX_PATH=C:/SDK/one;C:/SDK/twofind_package(MyLibrary CONFIG REQUIRED)会自动去<prefix>/lib/cmake/<name>下找配置文件,不要自己把每个cmake目录都拼进CMAKE_PREFIX_PATH。由于不同预编译包内部结构有差异,写好后可以用cmake --trace或直接查看生成的CMakeCache.txtCMAKE_PREFIX_PATH的最终值来确认有没有被覆盖。

3.4 在 Windows 上执行 bash 命令的方式

有些项目里把代码生成、版本号提取等步骤写成了 bash 脚本,Windows 默认没有 bash。CMake 本身不负责执行 bash,但可以通过add_custom_command显式调用。先找 bash 再执行:

find_program(BASH_EXECUTABLE bash) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/generated/version.h COMMAND ${BASH_EXECUTABLE} -c "sh gen/generate.sh > version.h" )

find_program会在 PATH 里定位 bash,COMMAND的第一个参数是可执行文件的完整路径,后面-c接一段 shell 命令。这里的BASH_EXECUTABLE为假时,构建阶段会给出“找不到文件”的错误,所以配置阶段可以先message(${BASH_EXECUTABLE})确认输出。Git for Windows 自带的 bash 路径通常在C:\Program Files\Git\bin\bash.exe,如果这个路径被带入COMMAND,整条命令要用双引号把带空格路径包好,CMake 3.26.6 在add_custom_command里对引号的传递有严格规则,出问题时打开--trace看实际执行命令。

4. 使用 cmake-3.26.6-windows-x86_64 时常见坑与排错

4.1 “cmake 不是内部或外部命令”与环境变量刷新

cmd 下执行 cmake 报'cmake' 不是内部或外部命令,PowerShell 下报The term 'cmake' is not recognized...,先别急着重装。这是 PATH 没有生效的表现,可能是写错了 bin 路径,也可能是改了环境变量后终端没刷新。先用完整路径验证程序本身可用:

C:\Tools\cmake-3.26.6-windows-x86_64\bin\cmake.exe --version

能正常输出则以当前 PATH 为准,执行where.exe cmake查看解析到的位置。如果显示的是旧版本 CMake 的路径,说明 PATH 里有更早的条目,把 zip 版 bin 目录排到前面即可。刷新环境变量除了重开终端,还可以在 cmd 里用refreshenv,不过很多系统没装这个命令,最可靠的办法是注销重登或新开进程。

4.2 “Could NOT find MSVC”与 VS 工具链缺失

zip 版 CMake 本身不携带编译器。configure 时如果提示找不到 MSVC、CMAKE_CXX_COMPILER为空,通常是 Visual Studio 装了但没装 C++ 组件。打开 Visual Studio Installer,找到已安装的 VS,修改并勾选“使用 C++ 的桌面开发”,再点修改。装完以后不需要重新解压 CMake,只要重新开一个 x64 Native Tools Command Prompt 并执行同样的配置命令,MSVC 的环境变量才会被正确继承。另一个常见问题是生成器版本选错,比如只有 VS 2019 却用-G "Visual Studio 17 2022",CMake 在注册表里找不到对应实例,会直接报“Could not find a matching Visual Studio instance”。这时用-G "Visual Studio 16 2019"或干脆去掉-G让 CMake 自动选择,并在输出里看它挑中了哪个。

4.3 路径带空格、权限和卸载残留

zip 包内层目录自己不带空格,但工具根目录一旦选在带空格的路径,后续add_custom_command、外部工具调用和某些旧的 CMake 模块容易在字符串拼接处出错。我一般把 CMake 这类构建工具放在C:\Tools或用户目录下,不进C:\Program Files。企业机器上没有管理员权限时,解压到%LOCALAPPDATA%\Tools是最省事的。要卸载 zip 版 CMake 时,只删目录和 PATH 里对应条目即可,没有注册表和卸载残留。想升级到更新版本,把新 zip 解压到新目录,替换 PATH 里的旧路径,不用先删旧的,等验证新版本没问题再删。

4.4 构建时找不到 DLL 与配置类型不一致

生成 VS 工程后,用cmake --build build --config Release构建是常见做法。--config必须与目标配置一致,否则可能出现 Debug 下能构建但 Release 下缺符号或属性不匹配。构建出来的程序若提示缺 DLL,先不要怀疑 CMake 损坏,Windows 加载 DLL 的搜索顺序是从 exe 所在目录开始,再进系统目录,最后查 PATH。如果项目里第三方 DLL 和 exe 不在一起,就需要在 CMakeLists 里用target_link_libraries链接对应的导入库,或者在构建后把 DLL 复制到CMAKE_RUNTIME_OUTPUT_DIRECTORY。可以用dumpbin /dependents app.exe看依赖清单,确认到底缺哪个库,再用where <库名>查搜索路径。

现象常见原因处理动作
cmake 命令找不到PATH 未配置或未刷新修正 PATH 后重开终端
找不到 MSVC未安装 C++ 工作负载VS Installer 补装并重启
CMake 报 generator 不支持VS 版本与生成器名不匹配改用对应生成器名称
构建后缺 DLL输出目录或 PATH 不含 DLL拷贝 DLL 到 exe 同目录
配置时报 CMAKE_PREFIX_PATH 无效第三方库布局不符合约定检查<prefix>/lib/cmake/<name>

5. 固化 cmake-3.26.6 的配置:CMakePresets.json 与一键构建

5.1 用 CMakePresets.json 固定生成器和参数

上面命令行里的生成器、架构、前缀路径都可以写进CMakePresets.json,放在项目根目录。CMake 3.26.6 支持 schema version 6,写一个最小可用的:

{ "version": 6, "configurePresets": [ { "name": "vs2022-x64", "generator": "Visual Studio 17 2022", "architecture": "x64", "binaryDir": "${sourceDir}/build", "cacheVariables": { "CMAKE_PREFIX_PATH": "C:/SDK/mylibrary-2.0", "CMAKE_RUNTIME_OUTPUT_DIRECTORY": "${sourceDir}/build/bin" } } ] }

cacheVariables里的键会被当成-D参数传给配置阶段;architecture对应-AbinaryDir对应-B。预设文件里的${sourceDir}会被 CMake 替换成预设文件所在目录的绝对路径,所以项目换位置后不需要改这个字段。有了预设,配置命令缩短为cmake --preset vs2022-x64,后续构建仍然用cmake --build build --config Release,所有项目相关参数跟着源码走,换机器后不用再回忆之前敲过的参数。

5.2 验证预设与迁移到新机器

执行cmake --list-presets可以看到当前项目支持哪些预设,若输出为空,说明 JSON 格式或 schema 版本有问题。确认第一行出现vs2022-x64后,再用cmake --preset vs2022-x64 --debug可以展开完整的 CMake 命令,适合对变量展开有疑问时排查。迁移到新机器时,只要把 zip 解压到目标目录,修改 PATH,预设里的绝对缓存变量若变了,重新执行一次cmake --preset即可。在 CI 里直接写cmake --preset vs2022-x64 && cmake --build build --config Release,返回码和输出都单一稳定,比在脚本里手动拼接一串-D参数可靠得多。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询