当前位置:

首页 > 系统应用 > 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为现代的开发工作流程提供了更简洁和用户友好的体验。

本文内容来源于网友投稿,如有侵权请联系删除。
作者最新文章
系统应用
相关文章 更多
除了界面,Windows11和Win10还有哪些实质差异
除了界面,Windows11和Win10还有哪些实质差异

除了开始菜单的变化,Windows 11在TPM 2.0安全要求、窗口贴靠布局、驱动兼容性以及系统更新策略上与Windows 10有显著不同。本文详解两者实质差异,助你判断是否值得升级。

win10专业版和家庭版关闭更新方法差别在哪
win10专业版和家庭版关闭更新方法差别在哪

详解Windows 10家庭版和专业版在关闭或暂停自动更新时的操作区别。涵盖通用的暂停更新、活动时间设置,以及专业版独有的组策略管理入口,帮助不同版本用户合理控制更新节奏,避免系统安全风险。

win10暂停更新最长可以设置多少天怎么操作
win10暂停更新最长可以设置多少天怎么操作

想知道Win10暂停更新最长能设多久?官方支持最长暂停35天。本文图文演示如何在设置中开启暂停、确认生效日期,以及到期后如何恢复更新或调整活动时间以避免打扰。

win10怎么屏蔽win10系统更新的弹窗提醒
win10怎么屏蔽win10系统更新的弹窗提醒

本教程介绍如何在Windows 10中通过暂停更新、设置活动时间及安排重启时间来减少更新弹窗提醒。包含通知隐藏技巧及更新失败排查步骤,帮助你在保持系统安全的同时减少工作打扰。

win10更新后台占用CPU过高怎么关闭自动更新
win10更新后台占用CPU过高怎么关闭自动更新

Windows 10 更新时 CPU 占用过高怎么办?本教程演示如何通过任务管理器确认更新进程,使用“暂停更新”功能临时停止后台活动,并设置“活动时间”防止自动重启干扰工作。提供安全的故障排查步骤,避免直接禁用系统服务带来的风险。

win10正在玩游戏弹出更新重启怎么禁止
win10正在玩游戏弹出更新重启怎么禁止

Win10玩游戏时突然弹出更新重启提示?不要强制关机。本文教你如何通过设置“活动时间”避免自动重启,利用“安排重启”规划空闲时间,以及合理使用“暂停更新”功能。区分不同状态下的应对策略,既保护游戏进度又维持系统安全。

win10自动更新抢占网络带宽该怎么处理
win10自动更新抢占网络带宽该怎么处理

Win10自动更新抢占带宽导致游戏卡顿或网页打不开?本教程教你通过任务管理器确认更新进程,利用暂停更新、按流量计费连接和传递优化带宽限制,精准控制Windows Update下载速度,解决网络拥堵问题。

win10家庭版有没有简单办法阻止强制更新
win10家庭版有没有简单办法阻止强制更新

Win10家庭版用户常受强制更新困扰。本文详解如何利用系统自带的暂停更新、活动时间和安排重启功能,在不破坏系统稳定性的前提下减少更新打扰,并分析注册表修改的风险及系统支持现状。

win10升级新版本后取消开机密码失效怎么修复
win10升级新版本后取消开机密码失效怎么修复

Windows 10更新后开机突然要求输入密码?本文解析自动登录失效的真实原因,提供通过netplwiz重新保存凭据、关闭Windows Hello干扰及排查账户策略的完整步骤,助你恢复免密进入桌面。

win10更新没下载完反复重试该怎么停止任务
win10更新没下载完反复重试该怎么停止任务

Windows 10更新下载失败反复重试怎么办?不要直接停用服务。本文教你通过设置页面暂停更新、启用按流量计费连接以及调整活动时间,安全地暂时停止下载任务并避免意外重启。

查看更多
精品专题 更多
装机必备
装机必备

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

Windows
Windows

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

macOS软件
macOS软件

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

Mac软件 更多
photoshop
photoshop
Windows、macOS 、 iPad

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

Blender
Blender
Windows、macOS 和 Linux

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

灵活计算器
灵活计算器
macOS/iOS/Android

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

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

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

photoshop
photoshop
Windows、macOS 、 iPad

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

Blender
Blender
Windows、macOS 和 Linux

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