ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

CMake 3.26.6 Windows免安装版:从解压配置到Visual Studio工程生成全指南

CMake 3.26.6 Windows免安装版:从解压配置到Visual Studio工程生成全指南 简介面向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.zip2.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 位 Windowszip打包方式免安装解压即用为什么推荐 zip 而不是 msimsi 安装器会写注册表、创建卸载项还会在开始菜单里放快捷方式而 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:\ToolsExpand-Archive .\cmake-3.26.6-windows-x86_64.zip -DestinationPath C:\ToolsExpand-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 2019v142Visual 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\DebugRelease 在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_DIRECTORY和CMAKE_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_PATHC:/SDK/mylibrary-2.0注意路径里用正斜杠CMake 在解析C:\SDK\...时会把\S当作转义序列虽然不会直接报错但展开后可能得到错误的路径。多个前缀用分号分隔-DCMAKE_PREFIX_PATHC:/SDK/one;C:/SDK/two。find_package(MyLibrary CONFIG REQUIRED)会自动去prefix/lib/cmake/name下找配置文件不要自己把每个cmake目录都拼进CMAKE_PREFIX_PATH。由于不同预编译包内部结构有差异写好后可以用cmake --trace或直接查看生成的CMakeCache.txt中CMAKE_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 里定位 bashCOMMAND的第一个参数是可执行文件的完整路径后面-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 2022CMake 在注册表里找不到对应实例会直接报“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/name5. 固化 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参数可靠得多。本文还有配套的精品资源点击获取
返回列表