ARTICLE DETAIL

资讯详情

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

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

安装 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到底写了什么把这三行背后那几个命令的语义讲清楚。⚠️ 写在最后以上内容是我在学习以后得一些总结和概括如有错误或者需要补充的地方欢迎各位大佬评论或者私信我交流
返回列表