展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 系统应用 > 4步上手Meson:让PostgreSQL16构建更现代化!

4步上手Meson:让PostgreSQL16构建更现代化!

导 读从PostgreSQL 16开始,除了传统的./configure和Makefile,我们将可以选择使用现代构建系统Meson来构建PostgreSQL。几周前,当我在为PostgreSQL开发社区补丁时,我开始练习meson,我被告知除了通常的Makefile之外,还需要更新meson.bu

导 读

4步上手Meson:让PostgreSQL16构建更现代化!

从PostgreSQL 16开始,除了传统的./configure和Makefile,我们将可以选择使用现代构建系统Meson来构建PostgreSQL。

几周前,当我在为PostgreSQL开发社区补丁时,我开始练习meson,我被告知除了通常的Makefile之外,还需要更新meson.build文件。这也意味着,如果您正在做开发社区功能的工作时,你需要考虑meson。今天,我将分享如何在Ubuntu 18.04上使用meson构建PostgreSQL的方法,希望对您有所帮助。

01Meson vs Makefile

Makefile

  • 广泛使用、成熟和稳定。

  • Makefile语法是复杂的,编辑和维护起来很繁琐。对于非常大或复杂的项目,它可能变得难以管理。

Meson

  • 语法简洁,易于理解和编写。

  • 提供快速高效的编译过程,同时保持易用性和灵活性。

Meson:https://mesonbuild.com/

02安装

我们需要安装Meson和Ninja才能开始使用它。版本非常重要,使用过旧或过新的版本可能会导致在构建过程中间出现错误。以下版本已经过确认可以正常工作(由我测试):

  • lmeson v0.57.2 (minimum meson version recommended by PostgreSQL), github downloadlink-1

  • lninja v1.10.1, github downladlink-2

link-1:

https://github.com/mesonbuild/meson/releases/download/0.57.2/meson-0.57.2.tar.gz

link-2:

https://www.highgo.ca/2023/07/14/building-postgresql-in-a-modern-way-with-meson/

下载好它们后,您需要将它们添加到PATH环境变量中,并将ninja放在/usr/bin/ninja中,以便构建脚本可以找到它们。

我也尝试过将Meson v0.57.2与更新版本的Ninja一起使用,但在构建过程中遇到了错误,因此我不能保证不同版本组合的构建是否会正常工作。::>_<::

03构建

Meson构建在PostgreSQL 16中可用,这个版本尚未正式发布,因此我们需要在主PG16开发分支上使用此功能。您可以在这里克隆官方的PostgreSQL源代码。

如果您之前已经运行过./configure和构建了PostgreSQL,则需要通过以下方式来撤销之前的操作。

$ make maintainer-clean

如果您想从头开始,可以执行以下步骤:

$ git clone https://github.com/postgres/postgres.git

现在,我们准备进行Meson构建。我们首先设置一个文件夹(在postgres文件夹内部),用于存储所有构建输出、日志、测试输出、配置等。

我们还可以在设置阶段传递特殊的构建参数。这些生成参数类似于传递给经典./configure脚本的参数。例如:

$ cd postgres
$ meson setup build --prefix=$PWD/highgo -Dcassert=true '-DPG_TEST_EXTRA=kerberos ldap' -Dbuildtype=debug

--prefix命令配置安装前缀,就像./configure一样。其余的可选构建参数通过-D参数名(无空格)传递给meson。

我们可以使用以下命令查看可能的参数列表及其描述:

$ meson configure
WARNING: The source directory instead of the build directory was specified.
WARNING: Only the default values for the project are printed, and all command line parameters are ignored.

Core properties:
Source dir /home/caryh/postgres

Main project options:

Core options Default Value Possible Values Description
------------ ------------- --------------- -----------
...
buildtype debugoptimized [plain, debug, debugoptimized, release, minsize, custom] Build type to use
...
cassert false [true, false] Enable assertion checks (for debugging)
...
PG_TEST_EXTRA Enable selected extra tests
...

... and many more

由于我们在构建文件夹外运行meson configure,因此它会向您发出警告,指出它仅打印构建的默认值和可能值。要查看当前值,我们需要在创建的文件夹中重新运行相同的命令。

$ cd build
$ meson configure
Core properties:
Source dir /home/caryh/postgres
Build dir /home/caryh/postgres/build

Main project options:

Core options Current Value Possible Values Description
------------ ------------- --------------- -----------
...
buildtype debug [plain, debug, debugoptimized, release, minsize, custom] Build type to use
...
cassert true [true, false] Enable assertion checks (for debugging)
...
PG_TEST_EXTRA kerberos ldap Enable selected extra tests

.... and many more

如果您需要更改任何构建参数,你也可以在构建文件夹内部进行更改,而不是像以前那样再次运行。

$ meson configure -Dcassert=false

当我们确定了构建参数后,我们可以通过在构建文件夹中运行以下命令来构建和安装:

$ ninja
$ sudo ninja install

就是这样!

04运行测试套件

大家都知道,PostgreSQL源代码仓库里有很多测试用例,这是为了保证软件能正常运行。一般来说,我们会分别运行make check或make check-world来执行核心进程、扩展和前端工具的测试套件。而在Meson中,这些操作都能一次性完成。只需要在构建文件夹内运行下面的命令:

$ meson test
1/257 postgresql:setup / tmp_install OK 8.48s
2/257 postgresql:setup / install_test_files OK 0.06s
3/257 postgresql:pg_upgrade / pg_upgrade/001_basic OK 0.18s 8 subtests passed
4/257 postgresql:recovery / recovery/002_archiving OK 3.61s 8 subtests passed
5/257 postgresql:recovery / recovery/003_recovery_targets OK 6.73s 9 subtests passed
6/257 postgresql:recovery / recovery/004_timeline_switch OK 6.99s 3 subtests passed
7/257 postgresql:recovery / recovery/005_replay_delay OK 7.58s 3 subtests passed
8/257 postgresql:recovery / recovery/006_logical_decoding OK 4.78s 20 subtests passed
9/257 postgresql:recovery / recovery/001_stream_rep OK 10.34s 59 subtests passed
10/257 postgresql:recovery / recovery/007_sync_rep OK 6.20s 11 subtests passed
11/257 postgresql:recovery / recovery/010_logical_decoding_timelines OK 4.59s 13 subtests passed
12/257 postgresql:recovery / recovery/013_crash_restart OK 3.55s 18 subtests passed
13/257 postgresql:recovery / recovery/014_unlogged_reinit OK 3.72s 23 subtests passed
14/257 postgresql:recovery / recovery/012_subtransactions OK 6.63s 12 subtests passed
15/257 postgresql:recovery / recovery/009_twophase OK 11.63s 24 subtests passed
16/257 postgresql:recovery / recovery/016_min_consistency OK 4.34s 1 subtests passed
17/257 postgresql:recovery / recovery/015_promotion_pages OK 4.74s 1 subtests passed
18/257 postgresql:recovery / recovery/008_fsm_truncation OK 14.55s 1 subtests passed
19/257 postgresql:recovery / recovery/017_shm OK 5.23s 4 subtests passed

...
36/257 postgresql:kerberos / kerberos/001_auth ERROR 0.21s (exit status 255 or signal 127 SIGinvalid)
...
236/257 postgresql:ldap_password_func / ldap_password_func/001_mutated_bindpasswd ERROR 0.19s (exit status 255 or signal 127 SIGinvalid)
...
249/257 postgresql:ldap / ldap/001_auth ERROR 0.17s (exit status 255 or signal 127 SIGinvalid)
250/257 postgresql:ldap / ldap/002_bindpasswd ERROR 0.18s (exit status 255 or signal 127 SIGinvalid)
...


Ok: 251
Expected Fail: 0
Fail: 4
Unexpected Pass: 0
Skipped: 2
Timeout: 0

这里有4个与ldap和kerberos相关的测试用例,由于未设置这些服务,所以失败在预期之内。我希望能更突出这些额外的测试用例,因为除非在$PG_TEST_EXTRA环境变量中指定它们,否则这些用例在传统设置中通常不会运行。在传统方式下,若要运行像ldap和kerberos这样的额外测试,需要执行以下操作:

$ cd src/test/ldap
$ make check PG_TEST_EXTRA=ldap

or

$ cd src/test/kerberos
$ make check PG_TEST_EXTRA=kerberos

默认情况下不会运行这些测试,因为它们需要设置单独的服务或者运行不安全的服务。使用Meson,如果您需要运行这些额外的测试,除非你在构建选项中明确定义-DPG_TEST_EXTRA为构建选项之一,不然的话以下命令将不起作用。

$ export PG_TEST_EXTRA="ldap kerberos"
$ meson test

===> will skip ldap and kerberos tests if you did not do '-DPG_TEST_EXTRA=kerberos ldap' during meson setup

05结论

总体而言,Meson提供了一种现代,直观和高效的方法来构建软件项目。虽然 Makefile 仍然是一个广泛使用且功能强大的构建系统,但Meson为现代的开发工作流程提供了更简洁和用户友好的体验。

本文内容来源于网友投稿,如有侵权请联系删除。
作者最新文章
系统应用
相关文章 更多
精品专题 更多
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

Mac软件 更多
photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
3dmax(3ds max)
3dmax(3ds max)

Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。