如果为已经安装好的外部 PostgreSQL 服务器独立开发编译扩展模块,官方提供了名为 PGXS 的构建基础设施。开发者只需编写一个极简的标准 Makefile 并包含 $(PGXS),即可自动识别编译环境:
MODULES = my_extension PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS)
PGXS 识别并支持以下常用 Makefile 构建变量:
MODULES需要根据同名单一 C 源码文件直接编译构建的共享库模块列表。
MODULE_big由多个 C 目标源码文件联合链接构建的复合共享库模块基础名称。
PROGRAM需要编译构建的独立可执行客户端或服务端二进制程序名称。
EXTENSION扩展的基础名称。声明后,构建工具链会自动将同名的 .control 文件安装至 SHAREDIR/extension/。
MODULEDIR指定共享库模块应当安装到的具体子目录。
DATA需要直接安装至 SHAREDIR/extension/ 的静态数据文件或 SQL 脚本清单。
DATA_built需要由 Makefile 规则动态生成后再执行安装的数据文件清单。
DATA_TSEARCH需要安装至全文检索配置目录的数据文件。
DOCS需要安装至文档目录的说明文档文件清单。
HEADERS需要安装至系统公共包含目录的 C 头文件。
HEADERS_MODULE需要安装至模块专属子目录的头文件。
SCRIPTS需要安装至 BINDIR 的可执行脚本文件清单。
SCRIPTS_built需要编译或预处理后安装至 BINDIR 的脚本文件。
REGRESS供 make installcheck 执行回归测试的基础测试用例脚本列表。
REGRESS_OPTS传递给 pg_regress 回归测试驱动程序的附加选项。
ISOLATION并发事务隔离性测试用例清单。
ISOLATION_OPTS传递给并发测试工具的附加参数选项。
TAP_TESTS布尔值,是否运行基于 Perl 的 TAP 自动化集成测试套件。
NO_INSTALL跳过常规的安装目标规则。
NO_INSTALLCHECK跳过针对运行中集群的 installcheck 测试。
EXTRA_CLEAN执行 make clean 时额外需要自动清理删除的文件清单。
PG_CPPFLAGS附加给 C 预处理器的编译宏与包含路径(如 -I)。
PG_CFLAGS附加给 C 编译器的专属标志(如 -Wall -O2)。
PG_CXXFLAGS附加给 C++ 编译器的专属编译参数。
PG_LDFLAGS附加给系统链接器的标志。
PG_LIBS链接到最终程序中所需的外部第三方共享库列表。
SHLIB_LINK在构建共享模块库时需要额外链接的动态库。
PG_CONFIG指定宿主环境中的 pg_config 可执行文件路径。