简介面向Windows 64位平台的CMake 3.10.0安装包适用于需要在Windows环境中开展跨平台构建工作的开发者、项目维护者与初学者。CMake是开源构建系统不直接编译代码而是读取项目中的CMakeLists.txt配置解析目标、源文件、依赖与编译选项再生成Visual Studio解决方案、Ninja或Unix Makefiles等构建文件适合大型项目、多编译器和多平台的统一管理。压缩包rar格式约18.61MB解压后即可使用cmake-gui或命令行工具通过find_package、include_directories、add_subdirectory、install、option等命令完成外部依赖查找、头文件路径设置、子目录引入、安装步骤与可选配置项定义还可借助工具链文件适配不同编译器或交叉编译环境。3.10.0版本在先前基础上包含若干修复与新模块对构建流程有所优化。已有1677人学习浏览利用它可快速搭建CMake环境降低多项目构建的配置成本也为掌握生成器、变量以及CTest、CPack等配套工具提供完整入口。1. cmake-3.10.0-win64-x64.rar 安装包一个“老但没死”的 Windows 构建工具很多人在复现旧工程、下载历史版本源码或者接手 2018 年前后的 C 项目时都会碰到cmake-3.10.0-win64-x64.rar这个安装包。它不是最新版也不是绿色免安装工具而是 CMake 3.10 官方二进制被第三方重新打包成 rar 后的分发形态。把它正确装好本质上就是给 Windows 装上一个能把CMakeLists.txt翻译成 Visual Studio 工程、再驱动编译器产出 exe 的构建入口。这篇文章我按“安装包拆解 → 安装与 PATH 配置 → 最小工程验证 → 典型踩坑 → 进阶用法”的顺序把从解压到跑通完整构建的整个过程讲透。适合刚接触 CMake 的读者也适合需要在老版本环境里复现旧项目的熟手。2. 拆解 cmake-3.10.0-win64-x64版本选型与安装包命名里的信息量拿到这个 rar先别急着解压。文件名里每一段都藏着信息3.10.0是版本号win64-x64说明这是 64 位 Windows 的二进制包.rar则暗示它不是官方直发形式。把这三件事搞清楚后面的安装才不会走弯路。2.1 为什么老项目还抱着 3.10.0 不放CMake 3.10.0 发布于 2017 年底距今已经过去很多年但它在旧工程复现场景里依然是高频出现的版本。原因很直接相当一批 2018 到 2019 年之间发布的开源工程CMakeLists.txt第一行写的是cmake_minimum_required(VERSION 3.10)后续维护也没有跟着新版语法迁移。用新版本 CMake 去构建这些工程多数时候能过但会冒出一堆 deprecation 警告甚至某些老式find_package模块的搜索行为在新版里被调整过导致同一个工程在新版上反而链接失败。我一般见到3.10.0出现在安装包文件名里第一反应是“这台机器上大概率要编一个锁死版本的项目”。CMake 3.10 恰好站在一个舒服的位置它已经有了target_compile_features、add_compile_options这些成熟的现代写法同时又还没引入后来若干破坏性变更。对于只想把旧代码跑起来、不想折腾兼容性的场景锁 3.10.0 是成本最低的选择。2.2 win64-x64这是 CMake 程序位数不是你的目标平台win64-x64表示 CMake 程序本体是 64 位 Windows 可执行文件仅此而已。很多人误以为这个包生成的工程一定是 x64 的这是个高频率误解。CMake 生成什么架构的工程取决于你传给-G的生成器和-A指定的平台参数而不是 CMake 程序本身的位数。CMake 安装包命名程序位数目标平台决定方式win32-x8632 位 CMake 程序由-G/-A决定win64-x6464 位 CMake 程序由-G/-A决定例如同样用这个 64 位 CMake-A x64生成 64 位工程不写-A则默认生成 Win32 工程。32 位系统装不了win64-x64这个包得找win32-x86版本。2.3 .rar 安装包的两种形态与分流处理官方发布的 CMake Windows 包一般是.exe安装程序或.zip压缩包。.rar是第三方重新打包的打开方式要分情况处理。解压后里面可能是两样东西之一一个.msi安装文件或者一整个 CMake 目录包含bin、doc、share。如果是.msi直接走安装向导CMake 会把自己装进Program Files或你指定的目录如果是一整个目录那这就是绿色版不需要安装只需要把bin目录加进 PATH 就能用。判断方法很简单解压后第一眼看到的是单个.msi还是好几个文件夹。另外第三方的 rar 解压时杀毒软件误报率不低解压完成后先确认cmake.exe和cmake-gui.exe还在不在再继续安装这一步能省掉后面许多莫名其妙的“找不到命令”问题。3. 把安装包变成能用的 cmake 命令安装向导、PATH 配置与静默安装无论 rar 里是 msi 还是绿色目录目标都一样让cmake这个命令在任何新开的终端里都能直接执行。这一章讲两条路线以及验证安装是否成功的关键命令。3.1 解压目录与安装向导里的三个关键选项如果 rar 里是.msi双击进入安装向导。我强烈建议你手动把安装路径改成C:\tools\cmake-3.10.0-win64-x64而不是默认的C:\Program Files\CMake。原因有二路径不含空格后续命令行操作省掉一堆引号转义路径够短写进 CMake 脚本或者工具链文件时不会因为路径字符串拼接出问题。安装向导里有一个选项叫 “Add CMake to the system PATH for all users”一定要勾上。这个是新手最容易漏的一步漏了之后cmake命令在任何终端里都找不到。另外两个选项“创建桌面快捷方式”和“创建开始菜单目录”无关紧要按需勾选。安装完成后检查一下安装目录里是否有bin、doc、share三个子目录其中bin下应该有cmake.exe、cmake-gui.exe、ctest.exe、cpack.exe四个可执行文件。缺任何一个是解压阶段被安全软件清理了建议重新解压并加白名单。3.2 命令行静默安装与 PATH 的两种设置途径批量化部署时不方便弹向导可以用 msiexec 做无人值守安装msiexec /i cmake-3.10.0-win64-x64.msi /qn ADD_CMAKE_TO_PATHSystem参数说明/qn表示完全静默不弹出任何界面ADD_CMAKE_TO_PATH是 CMake 官方 MSI 包的公开属性System值表示写入系统级 PATHUser值表示只写入当前用户的 PATH。注意如果之前手动装过别的版本 CMake/qn静默安装不会给出冲突提示装完后务必用下面一节的方式确认版本号。如果 rar 里是一整个绿色目录不需要安装但需要手动把bin目录加进 PATH。不推荐用setx PATH %PATH%;C:\tools\cmake-3.10.0-win64-x64\bin这种方式因为setx有 1024 字符的截断风险会把原有 PATH 写坏。我一般用 PowerShell[Environment]::SetEnvironmentVariable(Path, $env:Path ;C:\tools\cmake-3.10.0-win64-x64\bin, User)这段代码把 CMake 的 bin 目录追加到当前用户的环境变量 Path 里。参数说明$env:Path是当前进程的 PATH 值User表示写入用户级环境变量不需要管理员权限如果想写系统级用Machine但必须开管理员权限。写入后要新开终端才会生效。3.3 验证安装cmake --version 与 where cmake 各看什么安装完第一件事是验证两个命令配合使用cmake --version where cmakecmake --version输出第一行是版本号正常情况下会看到cmake version 3.10.0后面跟着平台信息。where cmake输出的是命令解析到的完整路径用来确认你调用的到底是哪个目录下的 cmake。这一步非常关键有些机器上装了别的大软件自带了一份 cmake如果你发现where cmake指向的路径不是你刚安装的C:\tools\...说明 PATH 顺序被占了后续构建很可能用到错误的版本。遇到这种情况把新装目录挪到 PATH 最前面或者干脆删掉旧的那份二选一。4. 用最小工程验证环境是否真能干活从 CMakeLists.txt 到可执行文件cmake --version能跑只是第一步真正要确认的是“这个 CMake 能不能配合你机器上的编译器产出可执行文件”。这一章用最简工程把完整链路走一遍。4.1 最小 CMakeLists.txt版本声明、语言声明与目标定义新建一个目录hello/里面放两个文件。先写CMakeLists.txtcmake_minimum_required(VERSION 3.10) project(hello LANGUAGES CXX) add_executable(hello main.cpp)这段配置的逻辑说明第一行声明最低 CMake 版本在 3.10.0 上运行不会有版本策略告警第二行project(hello LANGUAGES CXX)声明工程名和语言LANGUAGES CXX告诉 CMake 只需要检测 C 编译器如果你还用了 C就写成LANGUAGES C CXX第三行add_executable定义可执行目标第一个参数是目标名第二个参数是要编译的源文件。注意project()的语言参数必须大写写小写会在较老版本上报错。再写main.cpp#include iostream int main() { std::cout cmake 3.10.0 works std::endl; return 0; }这个文件只做一件事打印一行字符串用于确认生成的可执行文件能正常加载运行时库。4.2 用 Visual Studio 15 2017 生成器跑通一次完整构建CMake 本身不编译代码它负责生成工程文件再调用编译器完成实际构建。在 Windows 上最常见的生成器是 Visual Studio。给 3.10.0 搭配的稳妥生成器是 Visual Studio 15 2017也就是 VS 2017mkdir build cd build cmake .. -G Visual Studio 15 2017 -A x64 cmake --build . --config Release前三行创建一个独立的构建目录并进入cmake ..指定源码目录为上一级-G指定生成器-A x64指定目标平台为 64 位。配置成功后cmake --build . --config Release执行实际编译链接--config指定的配置类型只对多配置生成器有意义对应 Visual Studio 里的 Release 配置。这段流程为什么不写成cmake -S . -B build因为-S和-B这种参数形式在新版本 CMake 里是标准写法但在 3.10.0 上并不稳妥。老版本上最保险的用法就是cd build cmake ..。装老版本的目的就是复现老工程命令行习惯也应该跟着老版本走这是减少不确定性的一个细节。4.3 构建产物在哪build 目录与多配置生成器构建完成后build/目录下会出现一个Release子目录里面躺着hello.exe。这是因为 Visual Studio 生成器属于多配置生成器Debug 和 Release 的编译选项在配置阶段就同时准备好了构建时用--config指定哪一套输出目录自然按配置名分文件夹。生成器类型代表生成器构建产物目录配置时机多配置Visual Studiobuild/配置名/构建时用--config指定单配置MinGW Makefilesbuild/ 根目录配置时用CMAKE_BUILD_TYPE指定如果你换成 MinGW 或 Unix Makefiles 这类单配置生成器输出目录里就没有Release这一层而是直接用cmake配置时-DCMAKE_BUILD_TYPERelease决定的。理解这个差异找.exe的时候能少走弯路。运行一下验证.\Release\hello.exe看到cmake 3.10.0 works输出说明 CMake、生成器和编译器三者之间完全没有兼容性问题这套环境可以交给任何需要 3.10.0 的旧项目使用了。5. 安装与初用阶段的 5 个典型坑现象、原因与解决老版本软件在 Windows 上的坑比较集中这里选 5 个最常见的写下来每一条都是“现象 → 原因 → 解决”的结构。这些坑多数不是玄学本质都是环境变量、版本边界和路径细节。5.1 新开终端还是找不到 cmake 命令现象安装时明明勾了 “Add CMake to PATH”安装完新开一个黑窗口输入cmake却提示不是内部或外部命令。原因终端进程启动时读取的是当时的环境变量快照如果新开的终端是从某个旧进程比如资源管理器继承来的PATH 不一定刷新。解决关掉所有终端窗口和资源管理器重新开一个如果还不行运行where cmake和 PowerShell 的$env:Path确认安装目录确实在 PATH 里。这一步能把 80% 的“装了不能用”问题一次性排除。5.2 cmake-gui 启动报错或提示缺运行库现象命令行 cmake 完全正常但双击cmake-gui.exe弹窗报错或者提示缺少某运行库无法启动。原因CMake 图形界面在 Windows 上依赖 .NET Framework 运行库精简版系统或 Server Core 环境经常缺。解决如果你只需要构建直接用命令行 cmake 即可完全绕开 GUI确实需要图形界面的安装对应版本的 .NET Framework 后再启动。5.3 同一份 CMakeLists.txt 在新版能编在 3.10.0 上翻车现象工程在装了新版 CMake 的机器上一切正常拿到这台 3.10.0 上报错报错信息类似unknown argument或not found。原因CMakeLists.txt 里用了 3.10.0 发布之后才加入的语法或命令比如在新版本里常见的target_link_options3.13 加入或string(JSON ...)3.19 加入。3.10.0 根本不认识这些命令自然报错。解决先看文件头部的cmake_minimum_required声明——如果它本身写的是 3.16那是工程主动选择高版本与 3.10.0 无缘如果声明确实是 3.10那就是工程里混入了高版本特性的代码顺着报错行改回旧语法。这是老版本复现里最真实的一类问题没有捷径只能逐行排查。5.4 路径含空格或中文导致配置阶段直接失败现象配置阶段报错类似The source directory does not exist或者生成阶段某个第三方模块找不到文件但路径明明是对的。原因源码路径或 CMake 安装路径里有空格、中文和特殊字符。CMake 本身对空格处理得还可以但很多第三方Find*.cmake模块拼接路径时不加引号路径一复杂就炸。解决安装 CMake 时用C:\tools\cmake-3.10.0-win64-x64这种无空格路径源码目录也尽量放在C:\work这类纯英文路径下。这是踩过最深的一次坑后来养成了路径里绝不出现中文的习惯。5.5 用 3.10.0 配 VS 2019生成器识别不到编译器现象cmake .. -G Visual Studio 16 2019配置后报错提示找不到编译器或无法识别 Visual Studio 实例。原因CMake 对 VS 2019 的正式支持从 3.14 才开始3.10.0 发布时 VS 2019 还不存在它自然认不出这一代编译器。解决老版本 CMake 配老版本 VS3.10.0 的最佳搭档是 VS 2017生成器名Visual Studio 15 2017如果机器上只有 VS 2019那要么升级 CMake要么让项目保持旧语法。遇到这种情况我的选择是直接换新版 CMake不为一个老版本牺牲整个工具链。6. 把 3.10.0 用出高级感缓存预置与离线迁移两个技巧最后给两个实际工作中最常用、但新手不太会主动查的技巧预置缓存配置和整目录离线迁移。两个技巧都用得上 3.10.0且不依赖更高版本特性。6.1 用 -C 脚本预置缓存把问答环节一次做完首次配置 CMake 时有些变量交互式询问很浪费时间。可以写一个预加载脚本让 CMake 在读取 CMakeLists.txt 之前就把缓存变量定好# cache-init.cmake set(CMAKE_BUILD_TYPE Release CACHE STRING FORCE) set(CMAKE_INSTALL_PREFIX C:/tools/hello-install CACHE PATH FORCE)cd build cmake .. -C ../cache-init.cmake -G Visual Studio 15 2017 -A x64-C参数指定预加载脚本脚本里CACHE ... FORCE强制覆盖已有缓存值。注意-C只在首次配置时生效如果 build 目录里已经存在 CMakeCache.txt再执行这条命令不会更新变量必须删掉整个 build 目录重来。如果做交叉编译最好也把CMAKE_TOOLCHAIN_FILE写进这个脚本一次配好避免每次手输一长串-D参数。6.2 离线迁移整目录拷走加 PATH 脚本绿色版 CMake 最大的价值是离线迁移。把整个cmake-3.10.0-win64-x64文件夹拷到另一台机器不用安装只要配好环境变量就能用。因为bin目录下的cmake.exe依赖同目录的若干 DLLshare目录里是各模块文件三个目录必须整份带走。迁移后可以写一个环境初始化脚本避免手工改系统环境变量echo off set PATHC:\tools\cmake-3.10.0-win64-x64\bin;%PATH% cmake --version这段批处理把 CMake 的 bin 目录临时加到当前命令行的 PATH 前部并打印版本号确认生效。用在 CI 机器的构建脚本开头很合适不污染系统级环境变量也不用担心 setx 截断 PATH 的问题。我现在的习惯是遇到必须锁 3.10.0 的环境第一件事永远是看CMakeLists.txt头部的版本声明第二件事是确认机器上 Visual Studio 的版本最后才去找安装包。顺序反了就会在 5.5 那种兼容性问题上白白耗掉一下午。希望帮到你。本文还有配套的精品资源点击获取