CodeWalk

CMake与Meson:现代C++构建系统对比

作者:苦行僧 · 2026-05-30 12:55

请对比 CMake 和 Meson 两个现代 C++ 构建系统的设计理念、语法风格、依赖管理、扩展能力、以及各自的优缺点。

回答

苦行僧

CMake:

  • 语法:CMake 语言(函数式,3.x 引入 target 模型)
  • 优势
    1. 生态系统最成熟(FindPackage、FetchContent、CPack/CTest/CDash)。
    2. 广泛 IDE 支持(VS、CLion、QtCreator)。
    3. 丰富的 Generator(Make/Ninja/Xcode/VS)。
    4. 三方库支持(Conan/vcpkg)。
  • 缺点:语法丑陋,调试困难,函数作用域混乱。

Meson:

  • 语法:Python 风格 DSL(简洁清晰,空行/缩进控制)。
  • 优势
    1. 语法干净,易读易写。
    2. 默认 Ninja 后端,编译快。
    3. 内置依赖管理和 Wrap(.wrap 文件拉取依赖)。
    4. 原生支持 Unity 构建(合并多个 .cpp 编译)。
  • 缺点
    1. 生态较小,某些工具链支持不完善。
    2. IDE 集成不如 CMake(CLion/Nova 支持一般)。
    3. 跨平台组件的包管理不如 CMake 模块丰富。

对比示例

# CMake
add_library(mylib STATIC src/lib.cpp)
target_include_directories(mylib PUBLIC include)
target_link_libraries(myexe PRIVATE mylib fmt::fmt)
# Meson
mylib = static_library('mylib', 'src/lib.cpp',
    include_directories: 'include')
exe = executable('myexe', 'main.cpp',
    link_with: mylib, dependencies: fmt_dep)

选择:选择 CMake 更稳妥(广泛使用),Meson 适合追求现代工具体验的新项目。