安装 CMake、选择生成器并跑通命令行工作流

发布时间:2026/9/3 5:26:36

安装 CMake、选择生成器并跑通命令行工作流
欢迎拜访雾里看山-CSDN博客本篇主题安装 CMake、选择生成器并跑通命令行工作流发布时间2026.9.2隶属专栏CMake目录这一篇要解决的问题安装 CMake在 Linux 上安装在 macOS 上安装在 Windows 上安装方式一官方安装包推荐方式二包管理器方式三Visual Studio Installer验证安装生成器是什么为什么推荐用 Ninja1. 速度快2. 输出更干净3. 跨平台一致4. CMake 官方主推安装 NinjaLinuxmacOSWindows最基本的命令行工作流第一步准备源码和 CMakeLists第二步配置configure第三步构建build完整工作流图推荐写法-S 和 -B清理构建删除 build 目录用 cmake 自带的清理常见报错和排查思路1. cmake: command not found2. Could not find Ninja3. CMakeLists.txt 找不到4. 编译器找不到5. 版本不够多配置生成器 vs 单配置生成器单配置生成器多配置生成器把工作流压缩到三行这一篇抓什么总结这一篇要解决的问题上一篇讲了 CMake 的定位它是一个构建系统的生成器自己不直接编译代码。这篇就要把工具链真正装起来并且跑通一条最基本的工作流CMakeLists.txt → cmake 配置阶段 → 本地构建文件 → cmake --build 编译如果这条链路能在你的机器上跑通一次后面所有内容就有了真实的落脚点。安装 CMake在 Linux 上安装主流发行版的包管理器基本都带 CMake。Ubuntu / DebiansudoaptupdatesudoaptinstallcmakeFedora / RHELsudodnfinstallcmakeArchsudopacman-Scmake但发行版自带的版本经常偏旧。CMake 升级很快建议尽量用3.15 以上的版本最好是3.20。如果包管理器版本太旧可以直接装官方预编译版本。在 macOS 上安装最方便的方式是 Homebrewbrewinstallcmake或者直接到 CMake 官方下载安装包https://cmake.org/download/下载.dmg之后像普通软件一样拖到 Applications 即可。在 Windows 上安装Windows 上有几种方式方式一官方安装包推荐去官网下载https://cmake.org/download/选择cmake-x.xx.x-windows-x86_64.msi安装时勾选Add CMake to the system PATH安装 GUI 版本可选方式二包管理器如果用 Chocolateychocoinstallcmake如果用 Scoopscoopinstallcmake方式三Visual Studio Installer如果安装 Visual Studio 时勾选了“使用 C 的桌面开发”它会自带一个版本的 CMake。但版本可能不是最新的。验证安装无论哪个平台装完之后都用下面这行验证cmake--version能看到类似这样的输出就说明装好了cmake version 3.27.7 CMake suite maintained and supported by Kitware (kitware.com/cmake).生成器是什么装好之后第一个概念是生成器Generator。CMake 不会自己编译它会先生成一套构建文件。这套文件是什么格式取决于你选的生成器。常见的生成器有平台生成器说明LinuxUnix Makefiles生成 Makefile由make驱动LinuxNinja生成build.ninja由ninja驱动WindowsVisual Studio 17 2022生成.sln工程文件WindowsNinja需要配合 MinGW 或 MSVC 工具链macOSXcode生成.xcodeprojmacOSUnix Makefiles或Ninja通用命令行方案如果不确定当前平台有哪些生成器可以执行cmake--help在最后几行会列出所有可用的生成器。为什么推荐用 Ninja这篇会重点推荐使用Ninja作为生成器。原因有几个1. 速度快Ninja 最初是为 Chrome 这种超大项目设计的增量构建工具。相比make它的依赖追踪更高效重新构建时常常更快。2. 输出更干净Ninja 默认只输出真正在执行的命令信息密度比make更高看起来更舒服。3. 跨平台一致Linux、macOS、Windows搭配 MinGW 或 MSVC都可以使用 Ninja。团队开发时多个平台共用一套构建行为沟通成本更低。4. CMake 官方主推近年来 CMake 官方文档里越来越多的示例都以 Ninja 为默认生成器。所以如果你是新项目建议直接用 Ninja。安装 NinjaLinuxsudoaptinstallninja-buildmacOSbrewinstallninjaWindows如果用 MSVC可以从 Visual Studio Installer 选 “Clang/C2 Clang…” 或者单独装 LLVM。如果用 MinGWMSYS2可以这样pacman-Smingw-w64-x86_64-ninja或者从 GitHub Release 下载https://github.com/ninja-build/ninja/releases下载ninja-win.zip解压把ninja.exe放到 PATH 里的目录即可。验证ninja--version最基本的命令行工作流第一步准备源码和 CMakeLists先建一个工作目录mkdirhello_cmakecdhello_cmake建一个最简单的main.cpp#includeiostreamintmain(){std::coutHello, CMake!std::endl;return0;}再建一个CMakeLists.txtcmake_minimum_required(VERSION 3.15) project(HelloCMake LANGUAGES CXX) add_executable(hello main.cpp)具体含义下一篇会细讲这里先跑通流程。第二步配置configure新建一个 build 目录mkdirbuildcdbuild调用 cmake让它生成构建文件cmake-GNinja..几个关键点-G Ninja指定生成器..表示源码目录在上一级这一步会生成build.ninja等文件如果一切顺利最后会看到类似-- Configuring done -- Generating done -- Build files have been written to: /path/to/build第三步构建build接着编译cmake--build.cmake --build是通用入口它会调用对应生成器的工具Ninja 项目下等价于执行ninjaMakefiles 项目下等价于执行makeVisual Studio 项目下等价于调用msbuild构建结束后在build目录下会生成可执行文件./hello输出Hello, CMake!完整工作流图把上面这条链路画一下项目根目录 ├── CMakeLists.txt ├── main.cpp └── build/ ├── build.ninja 由 cmake 生成 └── hello 编译产物工作流cmake -G Ninja -S . -B build # 配置 cmake --build build # 编译 ./build/hello # 运行推荐写法-S和-B上一段用了mkdir build cd build cmake ..这其实是老式写法。现代 CMake 推荐显式指定源码目录和构建目录cmake-S.-Bbuild-GNinja cmake--buildbuild各参数含义-S .源码目录是当前目录-B build构建目录是build-G Ninja使用 Ninja 生成器这种写法的好处是不需要先cd build命令行描述更明确团队成员复制粘贴时不会漏掉上下文清理构建有几种方式删除 build 目录最干净的做法rm-rfbuild用 cmake 自带的清理对于 Ninjaninja-tclean或者cmake--buildbuild--targetclean注意clean只会删除构建产物删除整个build目录会同时清掉缓存CMakeCache.txt等如果只是想重新配置删缓存就够了如果想重新走一遍流程整目录删更稳常见报错和排查思路1.cmake: command not found说明 PATH 里没找到 cmake常见于没有装装了但没加 PATHWindows 安装包忘了勾选 Add to PATH解决重新安装并加入 PATH。2.Could not find Ninja说明系统没有装 Ninja但指定了-G Ninja。解决装 Ninja或者去掉-G Ninja让 CMake 选默认生成器。3.CMakeLists.txt找不到通常是因为-S路径写错或者当前目录不对。解决用绝对路径或者确认pwd。4. 编译器找不到报错里经常会出现No CMAKE_CXX_COMPILER could be found.这一般说明没有装编译器编译器不在 PATH 里跨编译器路径没写对解决方式取决于平台Linux装build-essentialmacOS装 Xcode Command Line Toolsxcode-select --installWindows装 Visual Studio 或 MinGW并把工具链目录加入 PATH5. 版本不够报错里如果出现CMake 3.x.x or higher is required说明当前 CMake 版本低于cmake_minimum_required中指定的版本。解决升级 CMake或者修改项目中的版本要求。多配置生成器 vs 单配置生成器这一块很多人会混这里先把概念理清。单配置生成器一次配置只对应一种构建类型Debug 或 Release切换构建类型需要重新运行 cmake典型代表Unix Makefiles、Ninja比如cmake-S.-Bbuild-debug-GNinja-DCMAKE_BUILD_TYPEDebug cmake-S.-Bbuild-release-GNinja-DCMAKE_BUILD_TYPERelease两套独立构建互不干扰。多配置生成器一次配置可以同时管理多种构建类型切换构建类型不需要重新运行 cmake典型代表Visual Studio、XcodeVisual Studio 里会有Debug | x64Release | x64命令行下cmake--buildbuild--configRelease理解这两者的差异在后面讲解CMAKE_BUILD_TYPE时会很有用。把工作流压缩到三行如果你已经装好 CMake 和 Ninja那么一个新项目从空目录到跑起来基本就这三行cmake-S.-Bbuild-GNinja cmake--buildbuild ./build/hello后面的所有内容都会围绕这套基本工作流做扩展。这一篇抓什么这一篇真正要带走的是这几件事装好 CMake最好同时装好 Ninja熟悉生成器概念知道 CMake 不是自己编译而是生成构建文件跑通cmake -S . -B buildcmake --build build这套工作流知道-S、-B、-G、--build这些参数的意义理解单配置 / 多配置生成器的区别只要工作流跑通下一篇就可以真正开始写CMakeLists.txt了。总结安装 CMake、选择生成器并跑通命令行工作流这一篇真正要抓住的是这一组能力CMake 推荐 3.20生成器优先选 Ninja命令行核心cmake -S . -B build -G Ninjacmake --build build报错时优先看版本、编译器、生成器、路径这四类问题单配置 / 多配置生成器在切换构建类型时行为不同下一篇会讲第一个 CMake 项目最小CMakeLists.txt到底写了什么把这三行背后那几个命令的语义讲清楚。⚠️ 写在最后以上内容是我在学习以后得一些总结和概括如有错误或者需要补充的地方欢迎各位大佬评论或者私信我交流

相关新闻

STM32F103裸机综合测试程序:硬件自检与任务调度实战

STM32F103裸机综合测试程序:硬件自检与任务调度实战

2026/9/3 5:26:36

简介:本资源是一款面向嵌入式初学者与STM32裸机开发者的综合测试工程,专为PZ6806D开发板搭载ILI9481驱动的TFT-LCD显示屏设计,解决裸机环境下显示驱动验证、外设协同调试及硬件功能快速评估等核心问题。压缩包共313个文件,包含135…

共模电感与差模电感:从噪声路径到EMC滤波的工程实践

共模电感与差模电感:从噪声路径到EMC滤波的工程实践

2026/9/3 5:26:36

你有没有遇到过这样的情况:一个电路板明明原理图、PCB布局都检查了好几遍,元器件也选得“高大上”,但一上电测试,或者一到某些复杂电磁环境里,系统就莫名其妙地重启、通信误码、屏幕闪烁?排查了半天电源、时…

Spring Boot线上教学平台实战:从架构设计到核心模块实现

Spring Boot线上教学平台实战:从架构设计到核心模块实现

2026/9/3 5:26:36

简介:本资源是一套完整的基于Spring Boot开发的线上教学平台系统实现方案,面向计算机专业本科生毕业设计与Java Web开发初学者,解决在线教育场景下的课程管理、师生协同与教学服务数字化问题。压缩包共816个文件,30.67MB&#xff…

基于YOLOv8的机场跑道异物检测系统:从算法到工程部署全解析

基于YOLOv8的机场跑道异物检测系统:从算法到工程部署全解析

2026/9/3 6:26:38

简介:本资源是一套面向计算机、人工智能及相关专业在校学生与初学者的机场跑道异物(FOD)智能检测实战项目,基于YOLOv8实现端到端目标检测,解决民航安全领域中对金属碎片、塑料袋、石子等典型异物的实时识别需求&#x…

AI视频创作实战:大语言模型与AI绘画工具链整合指南

AI视频创作实战:大语言模型与AI绘画工具链整合指南

2026/9/3 6:26:38

在实际 AI 视频创作领域,单纯掌握一个工具往往不够。真正高效的工作流需要将大语言模型的内容生成能力、AI 绘画的视觉创作能力和视频剪辑工具的整合能力串联起来。本文将以制作“邵氏风格甜妹萌宠”AI 短剧为例,完整演示如何利用“豆包 即梦 剪映”这…

生产级UI自动化框架:pytest+POM+Allure工程化实践

生产级UI自动化框架:pytest+POM+Allure工程化实践

2026/9/3 6:26:38

简介:这是一套面向计算机相关专业在校学生、教师及初级测试工程师的UI自动化实战框架资源,基于Selenium与pytest构建,聚焦Web端功能回归测试、持续集成接入与工程化实践,有效解决手工测试效率低、脚本复用性差、报告可读性弱等典型…

GPT Plus与Codex技术解析:低成本AI编程助手实战指南

GPT Plus与Codex技术解析:低成本AI编程助手实战指南

2026/9/3 6:26:38

最近在开发者圈子里,一个话题悄悄火了起来:9块钱的GPT Plus成品号,配合Codex工具,真的能用吗?作为一个长期关注AI编程工具的技术博主,我第一反应也是怀疑——官方GPT Plus月费20美元,这些低价账…

开源手机投屏控制工具全解析:Scrcpy与RustDesk实战指南

开源手机投屏控制工具全解析:Scrcpy与RustDesk实战指南

2026/9/3 6:26:38

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

AI角色情绪表达:提示工程三层框架与动态系统构建

AI角色情绪表达:提示工程三层框架与动态系统构建

2026/9/3 6:16:38

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/3 5:20:28

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…