Meson+Ninja构建C++项目更快更简洁:Meson声明式描述逻辑,Ninja极速执行,编译速度比CMake+Make快2–3倍,配置代码减少约40%。

用 Meson + Ninja 构建 C++ 项目,确实比传统 Makefile 或 CMake 更快、更简洁。核心在于:Meson 负责声明式描述构建逻辑(易读易维护),Ninja 负责极速执行(依赖精准、并行高效)。两者组合,编译速度常比 CMake+Make 快 2–3 倍,且配置代码量减少约 40%。
一、安装与最小项目结构
Meson 是 Python 工具,Ninja 是独立二进制,均推荐用系统包管理器安装:
-
macOS:
brew install meson ninja - Ubuntu/Debian:
sudo apt install meson ninja-build - Windows(MSVC):用
pip install meson+ 下载 Ninja 官方 Windows 二进制并加入 PATH
项目目录建议这样组织:
myapp/
├── meson.build # Meson 入口文件(必需)
├── src/
│ ├── main.cpp
│ └── utils.cpp
└── include/
└── utils.hpp
二、写一个清晰的 meson.build
不用写规则、不操心编译器标志顺序——Meson 自动处理跨平台细节。下面是一个典型 C++17 可执行程序配置:
立即学习“C++免费学习笔记(深入)”;
project('myapp', 'cpp', version: '0.1.0', default_options: ['cpp_std=gnu++17'])
声明可执行目标
exe = executable(
'myapp',
sources: [
'src/main.cpp',
'src/utils.cpp'
],
include_directories: include_directories('include'),
dependencies: dependency('threads'), # 自动找 pthread 或 Windows 线程库
)
可选:加单元测试
test('basic', exe, args: ['--test'])
关键点:
-
project()第一次调用即定义整个项目,自动检测编译器和基础工具链 -
include_directories()支持相对路径,Meson 会自动转为-I参数 - 依赖用
dependency()声明,Meson 在 pkg-config、CMake、系统路径中自动查找
三、构建流程:两步完成,无中间脚本
完全跳过 configure/make 的繁琐步骤,直接:
# 1. 生成 Ninja 构建文件(只运行一次,或修改 meson.build 后重做) meson setup builddir2. 编译(支持增量、并行、静默)
ninja -C builddir
3. 运行(路径固定,无需 cd)
./builddir/myapp
Ninja 默认启用所有 CPU 核心并行,且只重新编译被修改或依赖变更的文件。首次构建后,改一个 .cpp 文件,通常 1 秒内完成重编。
四、常用工程化技巧
实际项目中,这些写法能显著提升可维护性:
-
条件编译:用
get_option('build_tests')配合meson configure -Dbuild_tests=true builddir -
子项目复用:在
subprojects/放第三方库(如 fmt、catch2),Meson 自动识别meson.build并内联构建 -
IDE 支持:VS Code 安装 “Meson” 插件,或用
meson setup builddir --ide=vscode生成配置 -
交叉编译:写
cross-file.txt描述目标平台,再meson setup builddir --cross-file cross-file.txt
Meson 内置对 sanitizer、coverage、PCH、CUDA 的支持,无需手动拼接 flag —— 比如开 ASan,只需 meson setup builddir -Db_sanitize=address。











