极客油画

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 」,也可搜索「 极客油画 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image