PostgreSQL 默认用 Meson 构建系统
有了meson,就没有再使用make的必要了
旨在成为 CMake 和 Autotools 的现代替代品,强调速度和易用性,使用类似 Python 的语法编写配置文件。
安装:
$ uv tool install meson
$ uv tool install ninja
附录A m4宏处理器和autotools工具链已经过时
m4宏处理器诞生于 1979 年。git://git.savannah.gnu.org/m4.git
- 在m4中,反引号不是命令执行(如 Shell),而是开启引用,单引号是结束引用。被引用的内容会被视为一个整体,m4不会展开其中的宏。
模板引擎和宏处理器的区别: 模板引擎是数据和模板分开的,宏处理器严格来说没有数据,只有文本替换。
gnu autotools包含如下项目:
- autoconf: git://git.savannah.gnu.org/autoconf.git
- 诞生于 1991 年
- 包含 autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate, ifnames 这7个工具, 使用perl和m4编写
- autoconf: 展开 configure.ac和 aclocal.m4中的宏,生成可执行的 configure 脚本
- automake: git://git.savannah.gnu.org/automake.git
- 诞生于 1994 年
- 包含 aclocal 和 automake 这两个工具, 使用perl语言和m4宏处理器编写
- aclocal: 扫描 configure.ac,将所需的宏定义(包括自定义宏)汇集到 aclocal.m4文件中
- automake: 根据 Makefile.am生成 Makefile.in模板文件
- libtool: git://git.savannah.gnu.org/libtool.git
- 诞生于 1999 年
- 只包含libtool这一个工具, 使用c和m4编写
autotools最终的产物是configure脚本文件和Makefile.in模板文件, 之后由用户执行./configure,根据系统环境生成最终的、可直接使用的 Makefile
Nginx 虽然采用了与 Autotools 相似的 configure -> make -> make install构建流程,但其构建系统是完全自主开发的,并非基于 GNU Autotools(autoconf、automake 等)
如何区分一个项目是否使用了 Autotools?项目中同时包含configure.ac和Makefile.am就是Autoconf+Automake的组合,如果只有configure.ac文件就是Autoconf+Makefile的组合。
m4和autotools已经过时, 只有遇到一些古老项目的时候, 才会遇到;c的跨平台编译应该使用Python-like DSL来做(python可读性强,且跨平台), 例如meson。
附录B meson支持rust的意义
Cargo: 纯 Rust 应用/库
Cargo + build.rs:Rust 为主,少量 C 依赖
Meson:C/C++ 为主,少量 Rust 模块
支持 Rust 对 Meson 来说是扩大其生态位,而不是与 Cargo 正面竞争。这让 Meson 在混合语言项目的构建领域拥有了独特的竞争优势,而这正是现代复杂软件开发的常见场景。
附录C makers
- 使用rust重构ninja,并作为一个库,库名sbuild
- 利用sbuild库,使用rust实现meson的大部分api,然后基于此,使用pyo3实现python绑定。这就是makers项目。
- 利用makers的python api,直接在项目根目录上添加一个configure.py文件,实现构建逻辑。
- 也可以在项目根目录上添加configure.rs文件,实现构建逻辑。
- 支持iot设备的源码构建和固件烧录。
本文发表于 0001-01-01,最后修改于 0001-01-01。
本站永久域名「 jiavvc.top 」,也可搜索「 极客油画 」找到我。

