17.3. 使用 Autoconf 和 Make 构建和安装#
17.3.1. 简短版本#
./configure
make
su
make install
adduser postgres
mkdir -p /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
长版本是本章节的其余部分。
17.3.2. 安装过程#
配置
安装过程的第一步是为您的系统配置源代码树并选择您想要使用的选项。这是通过运行
configure
脚本完成的。对于默认安装,只需输入./configure
此脚本将运行一系列测试以确定各种系统相关变量的值并检测您的操作系统的任何怪癖,最后将在构建树中创建几个文件来记录它发现的内容。
您还可以在源代码树外部的目录中运行
configure
,然后在那里构建,如果您希望将构建目录与原始源文件分开。此过程称为 VPATH 构建。方法如下mkdir build_dir
cd build_dir
/path/to/source/tree/configure [options go here]
make
默认配置将构建服务器和实用程序,以及所有仅需要 C 编译器的客户端应用程序和接口。默认情况下,所有文件都将安装在
/usr/local/pgsql
下。您可以通过向
configure
提供一个或多个命令行选项来定制构建和安装过程。通常,您会定制安装位置或构建的一组可选功能。configure
有大量选项,这些选项在 第 17.3.3 节 中进行了描述。此外,
configure
会响应某些环境变量,如 第 17.3.4 节 中所述。这些提供了定制配置的其他方法。构建
要启动构建,请键入以下任一命令
make
make all
(请记住使用 make。)构建将根据您的硬件花费几分钟。
如果您想构建所有可以构建的内容,包括文档(HTML 和手册页)和附加模块(
contrib
),请键入以下内容make world
如果您想构建所有可以构建的内容,包括附加模块(
contrib
),但不包括文档,请键入以下内容make world-bin
如果您想从另一个 Makefile 而不是手动调用构建,则必须取消设置
MAKELEVEL
或将其设置为零,例如像这样build-postgresql: $(MAKE) -C postgresql MAKELEVEL=0 all
如果不这样做,可能会导致奇怪的错误消息,通常是关于缺少头文件。
回归测试
如果您想在安装新构建的服务器之前对其进行测试,则可以在此阶段运行回归测试。回归测试是一套测试套件,用于验证 PostgreSQL 是否在您的机器上按照开发人员的预期运行。键入
make check
(这在 root 下不起作用;请以非特权用户身份执行此操作。)请参阅 第 33 章 以获取有关解释测试结果的详细信息。您可以通过发出相同的命令在以后的任何时间重复此测试。
安装文件
注意
如果您要升级现有系统,请务必阅读 第 19.6 节,其中包含有关升级集群的说明。
要安装 PostgreSQL,请输入
make install
这会将文件安装到 步骤 1 中指定目录。确保您有适当的权限来写入该区域。通常,您需要以 root 身份执行此步骤。或者,您可以预先创建目标目录并安排授予适当的权限。
要安装文档(HTML 和手册页),请输入
make install-docs
如果您构建了上面的 world,请改为输入
make install-world
这也会安装文档。
如果您在没有上述文档的情况下构建了 world,请改为输入
make install-world-bin
您可以使用
make install-strip
代替make install
在安装时剥离可执行文件和库。这将节省一些空间。如果您使用调试支持进行构建,剥离将有效地移除调试支持,因此仅在不再需要调试时才应执行此操作。install-strip
尝试执行一项合理的工作来节省空间,但它并不完全了解如何从可执行文件中剥离每个不需要的字节,因此如果您想尽可能节省所有磁盘空间,您将不得不进行手动工作。标准安装提供了客户端应用程序开发以及服务器端程序开发(例如用 C 编写的自定义函数或数据类型)所需的所有头文件。
仅客户端安装:如果您只想安装客户端应用程序和接口库,则可以使用以下命令
make -C src/bin install
make -C src/include install
make -C src/interfaces install
make -C doc install
src/bin
有一些仅供服务器使用的二进制文件,但它们很小。
**卸载:**要撤消安装,请使用命令make uninstall
。但是,这不会移除任何已创建的目录。
**清理:**安装后,您可以使用命令make clean
从源代码树中移除构建的文件来释放磁盘空间。这将保留configure
程序制作的文件,以便您稍后可以使用make
重新构建所有内容。要将源代码树重置为其分发时的状态,请使用make distclean
。如果您要在同一个源代码树内为多个平台进行构建,您必须执行此操作并为每个平台重新配置。(或者,为每个平台使用一个单独的构建树,以便源代码树保持不变。)
如果您执行构建,然后发现您的configure
选项有误,或者如果您更改了configure
调查的任何内容(例如,软件升级),那么在重新配置和重建之前执行make distclean
是一个好主意。如果没有这样做,您在配置选择中的更改可能无法传播到它们需要的所有地方。
17.3.3.configure
选项#
下面解释了configure
的命令行选项。此列表不详尽(使用./configure --help
获取详尽列表)。此处未介绍的选项适用于高级用例,例如交叉编译,并在标准 Autoconf 文档中进行了说明。
17.3.3.1. 安装位置#
这些选项控制make install
将文件放置的位置。在大多数情况下,--prefix
选项就足够了。如果您有特殊需求,可以使用本节中描述的其他选项自定义安装子目录。但是,请注意,更改不同子目录的相对位置可能会导致安装不可重新定位,这意味着您在安装后将无法移动它。(man
和doc
位置不受此限制影响。)对于可重新定位的安装,您可能需要使用稍后描述的--disable-rpath
选项。
--prefix=
#PREFIX
将所有文件安装在目录
PREFIX
下,而不是/usr/local/pgsql
。实际文件将安装到各个子目录中;不会将任何文件直接安装到PREFIX
目录中。--exec-prefix=
#EXEC-PREFIX
您可以将与架构相关的文件安装在不同的前缀
EXEC-PREFIX
下,而不是PREFIX
设置的位置。这对于在主机之间共享与架构无关的文件非常有用。如果您省略此项,则EXEC-PREFIX
设置为等于PREFIX
,并且与架构相关和不相关的文件都将安装在同一树下,这可能是您想要的。--bindir=
#DIRECTORY
指定可执行程序的目录。默认值为
,通常表示EXEC-PREFIX
/bin/usr/local/pgsql/bin
。--sysconfdir=
#DIRECTORY
设置各种配置文件的目录,默认值为
。PREFIX
/etc--libdir=
#DIRECTORY
设置安装库和动态可加载模块的位置。默认值为
。EXEC-PREFIX
/lib--includedir=
#DIRECTORY
设置安装 C 和 C++ 头文件的位置。默认值为
。PREFIX
/include--datarootdir=
#DIRECTORY
设置各种类型的只读数据文件的根目录。这仅为以下部分选项设置默认值。默认值为
。PREFIX
/share--datadir=
#DIRECTORY
设置已安装程序使用的只读数据文件的目录。默认值为
。请注意,这与数据库文件放置的位置无关。DATAROOTDIR
--localedir=
#DIRECTORY
设置安装区域设置数据的位置,特别是消息翻译目录文件。默认值为
。DATAROOTDIR
/locale--mandir=
#DIRECTORY
随 PostgreSQL 附带的手册页将安装在此目录下,位于各自的
man
子目录中。默认值为x
。DATAROOTDIR
/man--docdir=
#DIRECTORY
设置安装文档文件(“man” 页除外)的根目录。这仅设置以下选项的默认值。此选项的默认值为
。DATAROOTDIR
/doc/postgresql--htmldir=
#DIRECTORY
PostgreSQL 的 HTML 格式文档将安装在此目录下。默认值为
。DATAROOTDIR
注意
我们已采取措施,确保可以将PostgreSQL安装到共享安装位置(例如/usr/local/include
),而不会干扰系统其余部分的命名空间。首先,字符串“/postgresql
”会自动附加到datadir
、sysconfdir
和docdir
,除非完全展开的目录名已包含字符串“postgres
”或“pgsql
”。例如,如果您选择/usr/local
作为前缀,则文档将安装在/usr/local/doc/postgresql
中,但如果前缀是/opt/postgres
,则文档将安装在/opt/postgres/doc
中。客户端界面的公共 C 头文件安装在includedir
中,并且是命名空间干净的。内部头文件和服务器头文件安装在includedir
下的私有目录中。有关如何访问其头文件的信息,请参阅每个界面的文档。最后,如果合适,还将在libdir
下为可动态加载的模块创建一个私有子目录。
17.3.3.2.PostgreSQL功能#
本节中描述的选项可以构建各种默认情况下未构建的PostgreSQL功能。其中大多数功能并非默认功能,仅是因为它们需要其他软件,如第 17.1 节中所述。
--enable-nls[=
#LANGUAGES
]启用本机语言支持 (),即以除英语以外的语言显示程序消息的能力。
LANGUAGES
是一个可选的空格分隔的语言代码列表,例如--enable-nls='de fr'
。(系统会自动计算出列表与实际提供的翻译之间的交集。)如果您未指定列表,则会安装所有可用的翻译。要使用此选项,您需要Gettext API 的实现。
--with-perl
#构建PL/Perl 服务器端语言。
--with-python
#构建PL/Python 服务器端语言。
--with-tcl
#构建PL/Tcl 服务器端语言。
--with-tclconfig=
#DIRECTORY
Tcl 安装文件
tclConfig.sh
,其中包含构建与 Tcl 交互的模块所需的信息。此文件通常会自动在众所周知的位置找到,但如果您想使用其他版本的 Tcl,则可以指定查找tclConfig.sh
的目录。--with-llvm
#使用对基于LLVM 的 编译的支持进行构建 (参见第 32 章)。这需要安装LLVM 库。目前LLVM 的最低要求版本为 3.9。
llvm-config
将用于查找所需的编译选项。llvm-config
,然后llvm-config-$major-$minor
将在您的PATH
中搜索所有受支持的版本。如果这不能产生所需的程序,请使用LLVM_CONFIG
指定正确llvm-config
的路径。例如./configure ... --with-llvm LLVM_CONFIG='/path/to/llvm/bin/llvm-config'
LLVM 支持需要一个兼容的
clang
编译器(如果需要,使用CLANG
环境变量指定),以及一个可用的 C++ 编译器(如果需要,使用CXX
环境变量指定)。--with-lz4
#使用 LZ4 压缩支持进行构建。
--with-zstd
#使用 Zstandard 压缩支持进行构建。
--with-ssl=
#LIBRARY
使用对 (加密)连接的支持进行构建。唯一受支持的
LIBRARY
是openssl
。这需要安装 OpenSSL 包。configure
将检查所需的标头文件和库,以确保您的 OpenSSL 安装在继续之前足够。--with-openssl
#--with-ssl=openssl
的过时等效项。--with-gssapi
#使用对 GSSAPI 身份验证的支持进行构建。GSSAPI 需要安装 MIT Kerberos。在许多系统上,GSSAPI 系统(MIT Kerberos 安装的一部分)未安装在默认搜索的位置(例如,
/usr/include
、/usr/lib
),因此您必须使用选项--with-includes
和--with-libraries
以及此选项。configure
将检查所需的标头文件和库,以确保您的 GSSAPI 安装在继续之前足够。--with-ldap
#使用 支持进行构建,以进行身份验证和连接参数查找(有关详细信息,请参见 第 34.18 节 和 第 21.10 节)。在 Unix 上,这需要安装 OpenLDAP 包。在 Windows 上,使用默认 WinLDAP 库。
configure
将检查所需的标头文件和库,以确保您的 OpenLDAP 安装在继续之前足够。--with-pam
#--with-bsd-auth
#使用 BSD 身份验证支持进行构建。(BSD 身份验证框架目前仅在 OpenBSD 上可用。)
--with-systemd
#使用 systemd 服务通知支持进行构建。如果服务器在 systemd 下启动,这将改善集成,但如果没有则不会产生任何影响;有关更多信息,请参见 第 19.3 节。 libsystemd 及其关联的头文件需要安装才能使用此选项。
--with-bonjour
#使用 Bonjour 自动服务发现支持进行构建。这需要操作系统中提供 Bonjour 支持。建议在 macOS 上使用。
--with-uuid=
#LIBRARY
使用指定的 UUID 库构建 uuid-ossp 模块(该模块提供生成 UUID 的函数)。
LIBRARY
必须为以下之一:bsd
使用在 FreeBSD 和其他一些 BSD 派生系统中找到的 UUID 函数e2fs
使用由e2fsprogs
项目创建的 UUID 库;此库存在于大多数 Linux 系统和 macOS 中,也可以为其他平台获取ossp
使用 OSSP UUID 库
--with-ossp-uuid
#--with-uuid=ossp
的过时等效项。--with-libxml
#使用 libxml2 构建,启用 SQL/XML 支持。此功能需要 Libxml2 2.6.23 或更高版本。
为了检测所需的编译器和链接器选项,PostgreSQL 将查询
pkg-config
(如果已安装且了解 libxml2)。否则,如果找到 libxml2 安装的程序xml2-config
,则将使用该程序。更推荐使用pkg-config
,因为它可以更好地处理多架构安装。要使用位于不同寻常位置的 libxml2 安装,可以设置
pkg-config
相关的环境变量(请参阅其文档),或设置环境变量XML2_CONFIG
以指向属于 libxml2 安装的xml2-config
程序,或设置变量XML2_CFLAGS
和XML2_LIBS
。(如果安装了pkg-config
,那么要覆盖它关于 libxml2 所在位置的想法,你必须设置XML2_CONFIG
或同时将XML2_CFLAGS
和XML2_LIBS
设置为非空字符串。)--with-libxslt
#使用 libxslt 构建,启用 xml2 模块来执行 XML 的 XSL 转换。还必须指定
--with-libxml
。
17.3.3.3. 反功能#
本节中描述的选项允许禁用某些默认构建的PostgreSQL功能,但如果所需的软件或系统功能不可用,则可能需要关闭这些功能。除非确实必要,否则不建议使用这些选项。
--without-icu
#在不使用 ICU 库支持的情况下构建,禁用 ICU 整理功能的使用 (参见 第 24.2 节)。
--without-readline
#防止使用 Readline 库(以及 libedit)。此选项禁用 psql 中的命令行编辑和历史记录。
--with-libedit-preferred
#优先使用 BSD 许可的 libedit 库,而不是 GPL 许可的 Readline。仅当您同时安装了这两个库时,此选项才有意义;在这种情况下,默认使用 Readline。
--without-zlib
#--disable-spinlocks
#即使 PostgreSQL 没有针对该平台的 CPU 自旋锁支持,也允许构建成功。缺少自旋锁支持会导致性能非常差;因此,此选项仅在构建中止并告知您该平台缺少自旋锁支持时才应使用。如果需要此选项才能在您的平台上构建 PostgreSQL,请向 PostgreSQL 开发人员报告此问题。
--disable-atomics
#禁用使用 CPU 原子操作。此选项在缺少此类操作的平台上不起作用。在具有此类操作的平台上,这将导致性能不佳。此选项仅适用于调试或进行性能比较。
--disable-thread-safety
#禁用客户端库的线程安全性。这会阻止 libpq 和 ECPG 程序中的并发线程安全地控制其私有连接句柄。仅在具有不足线程支持的平台上使用此选项。
17.3.3.4. 构建过程详细信息#
--with-includes=
#DIRECTORIES
DIRECTORIES
是一个用冒号分隔的目录列表,这些目录将添加到编译器搜索头文件的列表中。如果您有安装在非标准位置的可选包(例如 GNU Readline),则必须使用此选项,并且可能还需要相应的--with-libraries
选项。示例:
--with-includes=/opt/gnu/include:/usr/sup/include
。--with-libraries=
#DIRECTORIES
DIRECTORIES
是一个用冒号分隔的目录列表,用于搜索库。如果您有安装在非标准位置的包,则可能必须使用此选项(以及相应的--with-includes
选项)。示例:
--with-libraries=/opt/gnu/lib:/usr/sup/lib
。--with-system-tzdata=
#DIRECTORY
PostgreSQL 包含自己的时区数据库,它需要此数据库进行日期和时间操作。此时区数据库实际上与许多操作系统(例如 FreeBSD、Linux 和 Solaris)提供的 IANA 时区数据库兼容,因此再次安装它将是多余的。当使用此选项时,将使用
DIRECTORY
中的系统提供的时区数据库,而不是 PostgreSQL 源发行版中包含的时区数据库。必须将DIRECTORY
指定为绝对路径。在某些操作系统上,/usr/share/zoneinfo
是一个可能的目录。请注意,安装例程不会检测到不匹配或错误的时区数据。如果您使用此选项,建议您运行回归测试,以验证您指向的时区数据是否与 PostgreSQL 正确配合使用。此选项主要针对了解其目标操作系统的二进制包分发商。使用此选项的主要优点是,无论许多本地夏令时规则发生任何更改,PostgreSQL 包都不需要升级。另一个优点是,如果在安装期间不需要构建时区数据库文件,则可以更直接地交叉编译 PostgreSQL。
--with-extra-version=
#STRING
附加
STRING
到 PostgreSQL 版本号。例如,你可以使用它来标记从未发布的 Git 快照构建的二进制文件或包含自定义补丁的二进制文件,并附加一个额外的版本字符串,例如git describe
标识符或发行包版本号。--disable-rpath
#不要标记 PostgreSQL 的可执行文件,以指示它们应该在安装的库目录中搜索共享库(请参阅
--libdir
)。在大多数平台上,此标记使用库目录的绝对路径,因此如果你稍后重新安装,它将无济于事。但是,你将需要为可执行文件提供其他方式来查找共享库。通常这需要配置操作系统的动态链接器以搜索库目录;有关更多详细信息,请参阅 第 17.5.1 节。
17.3.3.5. 其他#
通常,特别是对于测试构建,使用--with-pgport
调整默认端口号。本节中的其他选项仅建议高级用户使用。
--with-pgport=
#NUMBER
将
NUMBER
设置为服务器和客户端的默认端口号。默认值为 5432。端口始终可以在以后更改,但如果你在此处指定它,则服务器和客户端都将编译为相同的默认值,这非常方便。通常选择非默认值唯一充分的理由是,如果你打算在同一台机器上运行多个 PostgreSQL 服务器。--with-krb-srvnam=
#NAME
GSSAPI 使用的 Kerberos 服务主体的默认名称。默认值为
postgres
。通常没有理由更改此项,除非你正在为 Windows 环境构建,在这种情况下,必须将其设置为大写POSTGRES
。--with-segsize=
#SEGSIZE
设置 段大小,单位为千兆字节。大表被分成多个操作系统文件,每个文件的大小等于段大小。这避免了许多平台上存在的文件大小限制问题。默认段大小为 1 千兆字节,在所有受支持的平台上都是安全的。如果你的操作系统具有 “大文件” 支持(如今大多数操作系统都具有),则可以使用更大的段大小。这有助于减少使用非常大的表时消耗的文件描述符的数量。但请小心不要选择你的平台和打算使用的文件系统不支持的值。你可能希望使用的其他工具,例如 tar,也可以对可用文件大小设置限制。建议(但不是绝对要求)此值为 2 的幂。请注意,更改此值会破坏磁盘上的数据库兼容性,这意味着你无法使用
pg_upgrade
升级到具有不同段大小的构建。--with-blocksize=
#BLOCKSIZE
设置块大小(以千字节为单位)。这是表内存储和 I/O 的单位。默认值为 8 千字节,适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 32(千字节)之间的 2 的幂。请注意,更改此值会破坏磁盘数据库兼容性,这意味着您无法使用
pg_upgrade
升级到具有不同块大小的版本。--with-wal-blocksize=
#BLOCKSIZE
设置WAL 块大小(以千字节为单位)。这是 WAL 日志内存储和 I/O 的单位。默认值为 8 千字节,适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 64(千字节)之间的 2 的幂。请注意,更改此值会破坏磁盘数据库兼容性,这意味着您无法使用
pg_upgrade
升级到具有不同 WAL 块大小的版本。
17.3.3.6. 开发人员选项#
本部分中的大多数选项仅适用于开发或调试PostgreSQL。不建议将其用于生产版本,但--enable-debug
除外,在不幸遇到 bug 时,它可以帮助启用详细的 bug 报告。在支持 DTrace 的平台上,--enable-dtrace
也可以合理地用于生产。
在构建将用于在服务器内开发代码的安装时,建议至少使用选项--enable-debug
和--enable-cassert
。
--enable-debug
#使用调试符号编译所有程序和库。这意味着您可以在调试器中运行程序来分析问题。这会极大地增加已安装可执行文件的体积,并且在非 GCC 编译器上,它通常还会禁用编译器优化,导致速度变慢。但是,拥有可用的符号对于处理可能出现的任何问题非常有帮助。目前,仅当您使用 GCC 时,才建议将此选项用于生产安装。但是,如果您正在进行开发工作或运行测试版,则应始终启用此选项。
--enable-cassert
#在服务器中启用断言检查,它会测试许多“不可能发生”条件。这对于代码开发目的非常有价值,但测试会显著降低服务器速度。此外,启用测试不一定能增强服务器的稳定性!断言检查未按严重性分类,因此,即使是相对无害的错误,如果触发断言失败,也会导致服务器重新启动。不建议将此选项用于生产,但您应该在进行开发工作或运行测试版时启用此选项。
--enable-tap-tests
#使用 Perl TAP 工具启用测试。这需要 Perl 安装和 Perl 模块
IPC::Run
。 请参阅第 33.4 节了解更多信息。--enable-depend
#启用自动依赖项跟踪。使用此选项,makefile 会进行设置,以便在任何头文件更改时重新构建所有受影响的对象文件。如果您正在进行开发工作,这很有用,但如果您只想编译一次并安装,这只是浪费开销。目前,此选项仅适用于 GCC。
--enable-coverage
#如果使用 GCC,则所有程序和库都使用代码覆盖率测试工具编译。运行时,它们会在构建目录中生成包含代码覆盖率指标的文件。 请参阅第 33.5 节了解更多信息。此选项仅适用于 GCC 以及进行开发工作时。
--enable-profiling
#如果使用 GCC,所有程序和库都将被编译,以便可以对它们进行分析。在后端退出时,将创建一个包含
gmon.out
文件(其中包含分析数据)的子目录。此选项仅可与 GCC 配合使用,且仅在进行开发工作时使用。--enable-dtrace
#使用动态跟踪工具 DTrace 的支持编译 PostgreSQL。有关详细信息,请参见 第 28.5 节。
要指向
dtrace
程序,可以设置环境变量DTRACE
。通常需要这样做,因为dtrace
通常安装在/usr/sbin
下,而该目录可能不在您的PATH
中。可以在环境变量
DTRACEFLAGS
中指定dtrace
程序的额外命令行选项。在 Solaris 上,要在 64 位二进制文件中包含 DTrace 支持,您必须指定DTRACEFLAGS="-64"
。例如,使用 GCC 编译器./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...
使用 Sun 的编译器
./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ...
--with-segsize-blocks=SEGSIZE_BLOCKS
#以块为单位指定关系段大小。如果同时指定
--with-segsize
和此选项,则此选项获胜。此选项仅适用于开发人员,用于测试与段相关的代码。
17.3.4.configure
环境变量#
除了上面描述的普通命令行选项之外,configure
还会响应许多环境变量。您可以在configure
命令行上指定环境变量,例如
./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'
在此用法中,环境变量与命令行选项几乎没有区别。您还可以事先设置此类变量
export CC=/opt/bin/gcc
export CFLAGS='-O2 -pipe'
./configure
此用法很方便,因为许多程序的配置脚本对这些变量的响应方式类似。
这些环境变量中最常用的为CC
和CFLAGS
。如果您希望使用configure
选择的 C 编译器以外的 C 编译器,则可以将变量CC
设置为您选择的程序。默认情况下,configure
将选择gcc
(如果可用),否则选择平台的默认值(通常为cc
)。同样,如果需要,您可以使用CFLAGS
变量覆盖默认编译器标志。
以下是可以通过这种方式设置的重要变量的列表
BISON
#Bison 程序
CC
#C 编译器
CFLAGS
#传递给 C 编译器的选项
CLANG
#使用
--with-llvm
编译时,用于处理源代码内联的clang
程序的路径CPP
#C 预处理器
CPPFLAGS
#传递给 C 预处理器的选项
CXX
#C++ 编译器
CXXFLAGS
#传递给 C++ 编译器的选项
DTRACE
#dtrace
程序的位置DTRACEFLAGS
#传递给
dtrace
程序的选项FLEX
#Flex 程序
LDFLAGS
#链接可执行文件或共享库时使用的选项
LDFLAGS_EX
#仅链接可执行文件的其他选项
LDFLAGS_SL
#仅用于链接共享库的其他选项
LLVM_CONFIG
#llvm-config
程序用于定位 LLVM 安装MSGFMT
#msgfmt
程序用于本机语言支持PERL
#Perl 解释器程序。这将用于确定构建 PL/Perl 的依赖项。默认值为
perl
。PYTHON
#Python 解释器程序。这将用于确定构建 PL/Python 的依赖项。如果未设置此项,则按以下顺序探测:
python3 python
。TCLSH
#Tcl 解释器程序。这将用于确定构建 PL/Tcl 的依赖项。如果未设置此项,则按以下顺序探测:
tclsh tcl tclsh8.6 tclsh86 tclsh8.5 tclsh85 tclsh8.4 tclsh84
。XML2_CONFIG
#xml2-config
程序用于定位 libxml2 安装
有时,将事后添加到configure
选择的编译器标志中很有用。一个重要的示例是gcc的-Werror
选项不能包含在传递给configure
的CFLAGS
中,因为它会破坏configure
的许多内置测试。要添加此类标志,请在运行make
时将它们包含在COPT
环境变量中。COPT
的内容将添加到configure
设置的CFLAGS
和LDFLAGS
选项中。例如,你可以执行
make COPT='-Werror'
或
export COPT='-Werror'
make
注意
如果使用 GCC,最好使用至少-O1
的优化级别进行构建,因为不使用优化 (-O0
) 会禁用一些重要的编译器警告(例如使用未初始化的变量)。但是,非零优化级别会使调试变得复杂,因为逐步执行已编译代码通常不会与源代码行一一对应。如果你在尝试调试优化代码时感到困惑,请使用-O0
重新编译感兴趣的特定文件。一种简单的方法是向make传递一个选项:make PROFILE=-O0 file.o
。COPT
和PROFILE
环境变量实际上由PostgreSQLmakefile 以相同的方式处理。使用哪一个取决于偏好,但开发人员的常见习惯是将PROFILE
用于一次性标志调整,而COPT
可能一直保持设置。