CMake / Make / Ninja / MSVC / GCC / Clang / MSBuild —— 完整体系化理解

发布时间:2026/5/19 7:17:22

CMake / Make / Ninja / MSVC / GCC / Clang / MSBuild —— 完整体系化理解 一句话核心CMake 生成构建系统Make/Ninja/MSBuild 执行构建MSVC/GCC/Clang 才是真正编译器。你可以把整个体系理解成一个建筑工地CMake 工头制定施工计划Make / Ninja / MSBuild 工人执行计划MSVC / GCC / Clang 工具锤子、电钻1. 构建体系的角色定位1.1 CMake —— 元构建工具构建系统生成器CMake 的本质不会编译代码不会链接代码只负责生成构建系统它根据 CMakeLists.txt 生成Makefile给 makebuild.ninja给 ninja.sln给 Visual Studio / MSBuild.xcodeproj给 XcodeCMake 的输出取决于你选择的 generator。1.2 Make —— 传统构建工具Make 的特点根据 Makefile 执行编译命令语法古老但兼容性强并行能力一般make -j常用于 Linux / Unix1.3 Ninja —— 现代高速构建工具Ninja 的特点极快为 Chrome/Android 设计并行能力强输出简洁不适合手写通常由 CMake 生成构建脚本build.ninja1.4 MSVC —— Windows 官方 C/C 编译器MSVC 包含编译器cl.exe链接器link.exe调试符号PDBWindows SDK / CRT负责.cpp → .obj.obj → .exe / .dll1.5 GCC —— Linux 世界最常用的编译器GCC 的特点Linux 默认编译器稳定、兼容性强支持多语言C/C/Fortran 等1.6 Clang —— 现代编译器LLVMClang 的特点编译速度快错误信息友好跨平台Windows / Linux / macOS可替代 GCC 或 MSVC通过 clang-cl1.7 MSBuild —— Visual Studio 的构建系统MSBuild 是Visual Studio 的官方构建系统解析 .sln / .vcxproj调用 MSVC 编译器Visual Studio 内部不使用 Make 或 Ninja只使用 MSBuild。2. 它们之间的关系图景理解你写的代码 CMakeLists.txt │ ▼ CMake生成器 │ ┌──────────────┼────────────────┬──────────────────┐ ▼ ▼ ▼ ▼ Makefile build.ninja .sln Xcode 工程 给 make 给 ninja 给 MSBuild 给 xcodebuild │ │ │ │ ▼ ▼ ▼ ▼ make ninja MSBuild xcodebuild │ │ │ │ ▼ ▼ ▼ ▼ 编译器gcc / clang / cl.exe / clang-cl真正编译代码的是编译器而不是 CMake / Make / Ninja / MSBuild。3. CMake 的工作原理CMake 有两个阶段3.1 配置阶段Configure解析CMakeLists.txt依赖目标target编译选项平台信息生成缓存文件CMakeCache.txt3.2 生成阶段Generate根据 generator 生成Makefilebuild.ninja.slnXcode 工程CMake 本身不参与编译只负责生成构建系统。4. Make / Ninja / MSBuild 对比构建工具层特性MakeNinjaMSBuild平台Linux跨平台Windows速度慢极快中等并行能力一般强中等输出杂乱简洁冗长适合大型项目一般非常适合一般CMake 支持好最好好IDE 支持弱弱Visual Studio 原生VSCode 推荐 NinjaVisual Studio 必须用 MSBuild。5. 编译器层MSVC / GCC / Clang 对比特性MSVCGCCClang平台WindowsLinux跨平台标准支持好好最好错误信息一般一般最友好兼容性Windows 最佳Linux 最佳跨平台最佳调试符号PDBDWARFDWARF / PDBClang 是最现代的编译器MSVC 是 Windows 最强GCC 是 Linux 默认。6. 构建工具与编译器的组合构建工具可调用的编译器MakeGCC / ClangNinjaGCC / Clang / MSVC / clang-clMSBuildMSVC只能 MSVCNinja 是唯一能在所有平台调用所有编译器的构建工具。7. VSCode CMake Ninja MSVC最佳实践流程CMakeLists.txt ↓ cmake --preset debug ↓ 生成 build.ninja ↓ ninja -C build/debug ↓ cl.exe 编译 ↓ cppvsdbg 调试这是 Windows VSCode 下最现代、最快速的 C 构建体系。8. Visual Studio 的构建流程MSBuild.sln / .vcxproj ↓ MSBuild ↓ cl.exe / link.exe ↓ exe / dllVisual Studio 不使用 Ninja 或 Make。9. 跨平台构建体系推荐平台构建工具编译器WindowsNinjaMSVC / clang-clLinuxNinja / MakeGCC / ClangmacOSNinja / XcodeClangCMake Ninja 是跨平台最统一的选择。10. 最终总结CMake 是指挥者Make/Ninja/MSBuild 是执行者MSVC/GCC/Clang 是工具CMake 生成构建系统构建工具执行构建编译器真正编译代码VSCode 最佳组合CMake Ninja MSVCVisual Studio 必须使用 MSBuild

相关新闻