Meson 构建系统:让 C++ 项目高速驶入快车道
最近在使用一些开源项目的时候,发现都采用了meson+ninja的构建方式,摒弃了CMake,Makefile的方式,本文将会引入Meson,从入门安装到完整编写一个meson项目。
下面,我们来进入正文。
目录:
1.Meson安装
2.Meson Vs Cmake
2.1 Meson的优势与劣势
2.2 CMake的优势与劣势
3.Meson WrapDB
4.如何编写一个meson项目?
4.1 编写代码
4.2 meson项目管理
4.3 构建与运行Meson项目
注:本文的源码已发布于星球
1.Meson安装
https://github.com/mesonbuild/meson
Meson 可以通过 PyPi 获得,因此可以使用 pip3 install meson 进行安装。确保在不同系统中使用正确的 pip 命令,务必使用 Python 3 版本的 pip。
如果希望,也可以使用标准的 Python 命令在本地安装:
python3 -m pip install meson
对于使用 Ninja 进行构建的情况,可以直接从 Ninja GitHub 发布页面或通过 PyPi 下载 Ninja:
python3 -m pip install ninja
有关安装 Meson build 的更多信息,请阅读下方Meson官方网站。
https://mesonbuild.com/Getting-meson.html
2.Meson Vs Cmake
既然大家都用CMake,为何还要用Meson呢,他们各自优劣是什么呢?
在性能方面,Meson 通常以其快速的构建速度而闻名。Meson 的设计旨在优化构建速度,并且在增量构建方面表现特别出色。Meson 使用 Ninja 构建系统作为默认后端,Ninja 本身也以快速和高效而著称。
相比之下,CMake 的构建速度可能会受到项目规模的影响,尤其是在较大的项目中。CMake 使用各种生成器(如Makefile),而不同生成器的性能也可能有所不同。
当然也可以使用CMake + Ninja去提高编译速度。
从开源项目角度来看Meson,其使用场景也是非常的多,例如:PostgreSQL、QEMU、GNOME Software、GTK+,等等
https://mesonbuild.com/Users.html
2.1 Meson的优势与劣势
1.优势
基于Python,使用简单
支持交叉编译
所有对象都是强类型的:由于对象是诸如 'dependency'、'include directory' 等实体,因此很难出现字符串替换错误。
非常方便的引用第三发库
非常非常快,特别是在增量构建时。
文档比cmake好n倍。