在Apache Age Age Makefile的引擎盖下
#database #makefile #age #make

你好你好,

今天,我将解释Apache时代的制作费,以及为什么看起来像看起来像。

首先让我们在简短的角度看待它:

# License ....
MODULE_big = age

OBJS = src/backend/age.o \
       .... # some other objects
       src/backend/utils/name_validation.o

EXTENSION = age

DATA = age--1.3.0.sql

# sorted in dependency order
REGRESS = scan \
          ... all regression file names \
          name_validation \
          drop

srcdir=`pwd`

ag_regress_dir = $(srcdir)/regress
REGRESS_OPTS = --load-extension=age --inputdir=$(ag_regress_dir) --outputdir=$(ag_regress_dir) --temp-instance=$(ag_regress_dir)/instance --port=61958 --encoding=UTF-8

ag_regress_out = instance/ log/ results/ regression.*
EXTRA_CLEAN = $(addprefix $(ag_regress_dir)/, $(ag_regress_out)) src/backend/parser/cypher_gram.c src/include/parser/cypher_gram_def.h src/include/parser/cypher_kwlist_d.h

GEN_KEYWORDLIST = $(PERL) -I ./tools/ ./tools/gen_keywordlist.pl
GEN_KEYWORDLIST_DEPS = ./tools/gen_keywordlist.pl tools/PerfectHash.pm

ag_include_dir = $(srcdir)/src/include
PG_CPPFLAGS = -I$(ag_include_dir) -I$(ag_include_dir)/parser

PG_CONFIG ?= pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

src/backend/parser/cypher_keywords.o: src/include/parser/cypher_kwlist_d.h

src/include/parser/cypher_kwlist_d.h: src/include/parser/cypher_kwlist.h $(GEN_KEYWORDLIST_DEPS)
    $(GEN_KEYWORDLIST) --extern --varname CypherKeyword --output src/include/parser $<

src/include/parser/cypher_gram_def.h: src/backend/parser/cypher_gram.c

src/backend/parser/cypher_gram.c: BISONFLAGS += --defines=src/include/parser/cypher_gram_def.h

src/backend/parser/cypher_parser.o: src/backend/parser/cypher_gram.c
src/backend/parser/cypher_keywords.o: src/backend/parser/cypher_gram.c

src/backend/parser/ag_scanner.c: FLEX_NO_BACKUP=yes

installcheck: export LC_COLLATE=C

让我们分解

Apache许可证

“ Apache许可证是Apache软件基金会(ASF)撰写的允许的免费软件许可。[4]它允许用户将软件用于任何目的,将其分发,修改并分发修改的版本该软件根据许可条款的条款而不必担心特许权使用费。ASF及其项目根据Apache许可发布其软件产品。许多非ASF项目也使用了该许可。” Wiki说。

Module_big等

返回PostgreSQL“扩展建筑基础架构”
在第38章中,扩展了SQL,在其代码库中添加扩展的说明很好地解释了,请提及:“如果您正在考虑分发PostgreSQL扩展模块,请为他们设置便携式构建系统因此,很难。因此,PostgreSQL安装提供了用于扩展的构建基础架构,称为PGXS,因此可以简单地针对已经安装的服务器构建简单的扩展模块。PGXS主要用于包含C代码的扩展名,尽管可以用于纯 - SQL扩展也是如此。请注意,PGXS并非打算是一个通用构建系统框架,可用于构建任何软件与PostgreSQL的接口;它只是为简单的服务器扩展模块自动化常见的构建规则。对于更复杂的软件包,您可能需要需要编写自己的构建系统。” PostgreSQL文档说。

总而言之,他们提到,将PGXS基础架构用于您的扩展。您必须以特定格式编写 makefile ,该格式设置某些变量将被期望并在PostgreSQL的侧面使用,
在makefile中,您需要设置一些变量并包含全局PGXS MAKEFILE,并且还提供了一个简单的示例,该示例构建了一个名为ISBN_ISSN的扩展模块

MODULES = isbn_issn
EXTENSION = isbn_issn
DATA = isbn_issn--1.0.sql
DOCS = README.isbn_issn
HEADERS_isbn_issn = isbn_issn.h

PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

为什么要模块_big?

设置这三个变量之一,以指定与PostgreSQL一起构建的内容,显然年龄是一个共享库,所以第二个库是我们的选择

  • 模块:由具有相同词干的源文件构建的共享图表的列表(请在此列表中包括库后缀)

  • module_big :一个共享库,用于从多个源文件(objs in objs in objs中列出对象文件)

  • 程序:一个可执行的程序(在OBJ中列出对象文件)

其他的

变量也可以设置

  • 扩展: 扩展名称;对于每个名称,您必须提供一个Extension.control文件,该文件将安装到前缀/share/extension
  • Moduledir : 前缀/共享的子目录应安装哪些数据和文档文件(如果不设置,则设置扩展名,默认值是扩展名,或贡献(如果不是))
  • 数据: 随机文件安装到前缀/share/$ moduledir
  • data_uilt : 随机文件要安装到前缀/共享/$ moduledir,需要首先构建
  • data_tsearch : 在前缀/share/tsearch_data
  • 下安装的随机文件
  • 文档: 在前缀/doc/$ moduledir
  • 下安装的随机文件
  • 标题: 文件(可选地构建和)在前缀/include/includs/$ moduledir/$ module_big。
  • headers_uilt : 与data_uilt不同,headers_uilt中的文件不会被干净的目标删除;如果要删除它们,也将它们添加到Extra_Clean或添加您自己的规则以执行此操作。
  • 标题_ $模块
    要安装的文件(如果指定的(如果指定)之后)/includs/incruph/$ moduledir/$模块,其中$模块必须是模块中使用的模块名称或module_big。

  • headers_built_ $ module :与data_built不同,headers_built_ $模块中的文件不会被干净的目标删除;如果要删除它们,也将它们添加到Extra_Clean或添加自己的规则以执行此操作。

    除非在模块列表中有两个模块名称,否则将两个变量用于同一模块或任何组合是合法的,这些模块名称仅因构建前缀的存在而有所不同,这会导致歧义。在这种情况下(希望不太可能),您应该仅使用headers_built_ $模块变量。

  • 脚本
    脚本文件(不是二进制文件)安装到前缀/bin

  • scripts_built
    脚本文件(不是二进制文件)要安装到前缀/bin中,需要首先构建

  • 回归
    回归测试用例列表(没有后缀),请参见下文

  • regress_opts
    其他开关将传递到PG_REGRESS

  • 隔离
    隔离测试用例列表,有关更多详细信息,请参见下文

  • iNCLATION_OPTS
    其他开关传递到pg_isolation_regress

  • tap_tests
    切换定义是否需要运行TAP测试,请参见下文

  • no_install
    不要定义安装目标,对于不需要安装其构建产品的测试模块有用

  • no_installcheck
    不要定义安装检查目标,例如,例如,如果测试需要特殊配置,或者不使用PG_REGRESS

  • extra_clean
    额外的文件要删除清洁

  • pg_cppflags
    将被准备成cppflags

  • pg_cflags
    将附加到cflags

  • pg_cxxflags
    将附加到cxxflags

  • pg_ldflags
    将准备到ldflags

  • pg_libs
    将添加到程序链接行

  • shlib_link
    将添加到module_big链接行

  • pg_config
    PG_CONFIG程序的PostgreSQL安装的途径要构建(通常只是PG_CONFIG)在路径中使用第一个)

结论

这是关于年龄及其以这种形式编写的内容的快速概述,我希望它能从该文章中获得某种新信息。

参考: