Redrock Postgres 搜索 英文
版本: 16 / 17

17.3。使用 Autoconf 和 Make 编译及安装 #

17.3.1. 简短版本
17.3.2. 安装过程
17.3.3. configure 选项
17.3.4. configure 环境变量

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。安装过程 #

  1. 配置

    安装过程的第一步是为您的系统配置源代码树,并选择所需的选项。这可以通过运行 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 节 所述。这些变量提供额外的自定义配置方法。

  2. 构建

    要启动构建,请键入以下任一命令

    make
    make all
    

    请务必使用GNU make。)构建将根据您的硬件环境花费几分钟时间。

    如果您想要构建所有可以构建的内容,包括文档(HTML 和手册页)和附加模块(contrib),请键入

    make world
    

    如果您想要构建所有可以构建的内容,包括附加模块(contrib),但不包含文档,请键入

    make world-bin
    

    如果您想要从其他 Makefile 调用构建,而不是手动调用构建,则必须取消设置 MAKELEVEL 或将它设为零,例如像这样

    build-postgresql:
            $(MAKE) -C postgresql MAKELEVEL=0 all
    

    如果不这样做,则会导致奇怪的错误消息,通常与标头文件丢失有关。

  3. 回归测试

    如果您想要在安装新构建的服务器之前对其进行测试,可以在此步骤中运行回归测试。回归测试是一项测试套件,用于验证 PostgreSQL 是否按照开发人员的预期在您的计算机上运行。键入

    make check
    

    (这将无法以超级用户身份运行;以无特权用户身份运行此命令。)请参阅 第 31 章 了解有关解释测试结果的详细信息。您可以在以后的任何时候通过发出相同的命令来重复此测试。

  4. 安装文件

    注意

    如果您要升级现有的系统,请确保阅读 第 18.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 选项就足够了。如果您有特殊需求,您可以使用本节中描述的其他选项自定义安装子目录。但是,请注意,更改不同子目录的相对位置可能会使该安装无法重新定位,这意味着您在安装后将无法移动它。(mandoc 位置不受此限制影响。)对于可重新定位的安装,您可能需要使用后面描述的 --disable-rpath 选项。

--prefix=PREFIX #

将所有文件安装在目录 PREFIX 下,而不是 /usr/local/pgsql 下。实际的文件将安装到各个子目录中;所有文件都将直接安装到 PREFIX 目录中。

--exec-prefix=EXEC-PREFIX #

您可以将特定于架构的文件安装到与 PREFIX 所设置的不同的前缀 EXEC-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 随附的信息页都将安装在此目录下的各个 manx 子目录中。默认为 DATAROOTDIR/man

--docdir=DIRECTORY #

设置安装文档文件(“man” 页面除外)的根目录。这仅为以下选项设置默认值。此选项的默认值为 DATAROOTDIR/doc/postgresql

--htmldir=DIRECTORY #

PostgreSQL 的 HTML 格式文档将安装在这个目录下。默认是 DATAROOTDIR

注意

已经注意到,可以将 PostgreSQL 安装到共享安装位置(例如 /usr/local/include),而不会干扰系统其余部分的命名空间。首先,除非已完全展开的目录名已包含字符串 postgrespgsql,否则会自动将字符串 /postgresql 附加到 datadirsysconfdirdocdir。例如,如果您选择 /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] #

启用本机语言支持(NLS),即使用英语以外的语言显示程序消息的能力。 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 #

构建对基于 LLVMJIT编译提供支持(请参见第 30 章)。这需要安装 LLVM 库。目前,LLVM 所需的最低版本为 10。

llvm-config 将用于找到所需的编译选项。您的 PATH 中将搜索 llvm-config。如果这无法生成所需程序,则使用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 #

构建提供对SSL(加密)连接。唯一受支持的 LIBRARYopenssl。这就要求安装 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 #

使用LDAP 进行身份验证和连接参数查找(有关更多信息,请参见 第 32.18 节第 20.10 节)。在 Unix 上,这需要安装 OpenLDAP 软件包。在 Windows 上,使用默认 WinLDAP 库。在继续之前,configure 将检查必需的头文件和库以确保您的 OpenLDAP 安装程序充足。

--with-pam #

使用PAM(可插拔身份验证模块)支持。

--with-bsd-auth #

使用 BSD 身份验证支持进行构建。(BSD 身份验证框架目前仅在 OpenBSD 上可用。)

--with-systemd #

使用支持 systemd 的服务通知进行构建。如果服务器在 systemd 下启动但没有其他影响,这将改善集成;有关详细信息,请参见第 18.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_CFLAGSXML2_LIBS。(如果已安装 pkg-config,那么若要覆盖它对 libxml2 的位置设想,您必须设置 XML2_CONFIG 或设置 XML2_CFLAGSXML2_LIBS,使其成为不为空字符串)。

--with-libxslt #

使用 libxslt 编译,启用 xml2 模块来执行 XML 的 XSL 转换。--with-libxml 也必须指定。

--with-selinux #

使用 SElinux 支持进行构建,启用 sepgsql 扩展。

17.3.3.3. 反功能 #

本部分中描述的选项允许禁用某些默认情况下生成但可能需要在没有必需软件或系统功能的情况下关闭的 PostgreSQL 功能。除非绝对必要,否则不建议使用这些选项。

--without-icu #

不使用 ICU 库的支持进行构建,禁用 ICU 整理功能(请参阅 第 23.2 节)。

--without-readline #

防止使用 Readline 库(以及 libedit)。此选项在 psql 中禁用命令行编辑和历史记录。

--with-libedit-preferred #

支持使用 BSD 授权的 libedit 库,而不是 GPL 授权的 Readline 库。此选项仅在您已安装这两个库时才有意义;在这种情况下,默认使用的是 Readline

--without-zlib #

防止使用 Zlib 库。这将禁用 pg_dumppg_restore 中的压缩存档支持。

--disable-spinlocks #

即使 PostgreSQL 不针对平台提供 CPU 自旋锁支持,也要允许构建成功。缺乏自旋锁支持将导致非常差的性能;因此,只有在构建中止并告知您平台缺少自旋锁支持时才能使用此选项。如果此选项是您在平台上构建 PostgreSQL 所必需的,请向 PostgreSQL 开发人员报告此问题。

--disable-atomics #

禁用 CPU 原子操作。在缺乏此类操作的平台上,此选项不执行任何操作。在拥有这些操作的平台上,它会导致性能较差。此选项仅可用于调试或进行性能比较。

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 #

向 PostgreSQL 版本号追加 STRING。例如,你可以使用它来标记从未发布的 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 千兆字节,在所有支持的平台上都是安全的。如果您的操作系统有largefile支持(如今大多数操作系统都有此支持),您可以使用更大的段大小。这有助于减少使用非常大的表时消耗的文件描述符数量。但请谨慎,不要选择一个超过您的平台和您打算使用的文件系统支持的值。您可能希望使用的其他工具(比如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 除外,它可在不幸遭遇错误时启用详细错误报告,非常有用。在支持 DTrace 的平台上,在生产中使用 --enable-dtrace 也合情合理。

在构建一个用于在服务器内部开发代码的安装时,建议至少使用选项 --enable-debug--enable-cassert

--enable-debug #

用调试符号编译所有程序和库。这意味着您可以在调试器中运行程序来分析问题。这将大大增加已安装的可执行文件的大小,并且在非 GCC 编译器上,它通常还会禁用编译器优化,导致速度变慢。但是,当出现任何问题时,让符号可用会非常有帮助。目前,此选项仅在使用 GCC 时推荐用于生产安装。但如果您正在进行开发工作或运行测试版,那么您应该始终启用此选项。

--enable-cassert #

在服务器中启用 断言 检查,它会测试许多“不可能发生”条件。这对于代码开发非常有价值,但这些测试会显著减慢服务器速度。此外,启用这些测试并不会必然提高服务器的稳定性!断言检查未按严重性分类,因此即使是相对无害的错误也会在触发断言失败时导致服务器重启。此选项不建议用于生产,但您应该在进行开发工作或运行测试版时启用此选项。

--enable-tap-tests #

启用使用 Perl TAP 工具的测试。这需要 Perl 安装和 Perl 模块 IPC::Run。有关更多信息,请参见 第 31.4 段

--enable-depend #

启用自动依赖项跟踪。启用此选项后,当任何头文件发生更改时,将针对 Makefile 进行设置,以便重新构建所有受影响的对象文件。此选项在您进行开发工作时很有用,但如果您只想编译一次并安装,则只是浪费的开销。目前,此选项仅适用于 GCC。

--enable-coverage #

如果使用 GCC,所有程序和库都将使用代码覆盖率测试工具编译。运行时,它们将在构建目录中生成包含代码覆盖率指标的文件。有关详细信息,请参阅第 31.5 节。此选项仅用于 GCC 以及执行开发工作时。

--enable-profiling #

如果使用 GCC,所有程序和库都将以可进行概要分析的方式进行编译。在后端退出时,将创建子目录,其中包含包含概要分析数据的gmon.out 文件。此选项仅用于 GCC 以及执行开发工作时。

--enable-dtrace #

使用动态跟踪工具 DTrace 编译PostgreSQL。有关详细信息,请参阅第 27.5 节

可以设置环境变量DTRACE,以指向dtrace 程序。由于dtrace 通常安装在/usr/sbin(该路径可能不在您的PATH 中)下,因此通常需要这样做。

额外命令行选项(用于dtrace 程序)可在环境变量DTRACEFLAGS 中指定。在 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' ...
--enable-injection-points #

使用服务器中的注入点编译PostgreSQL。注入点允许在预定义代码路径中的服务器内部运行用户定义代码。这有助于以受控方式测试和调查并发情况。默认情况下,此选项已被禁用。有关详细信息,请参阅第 36.10.13 节。此选项仅供开发人员用于测试。

--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

这种用法很方便,因为许多程序的配置文件都以类似的方式响应这些变量。

这些环境变量中最常用的变量是 CCCFLAGS。如果您更倾向于使用不同于 configure 选择的 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 选项不能包含在传递给 configureCFLAGS 中,因为它会破坏 configure 的许多内置测试。要添加此类标志,请在运行 make 时将它们包含在 COPT 环境变量中。 COPT 的内容将添加到由 configure 设置的 CFLAGSLDFLAGS 选项中。例如,您可以执行以下操作

make COPT='-Werror'

export COPT='-Werror'
make

注意

如果使用 GCC,最好使用至少为 -O1 的优化级别进行构建,因为不使用优化(-O0)会禁用一些重要的编译器警告(例如不使用未初始化的变量)。但是,非零优化级别可能会使调试变得复杂,因为逐步执行已编译的代码通常不会与源代码行一一对应。如果您在尝试调试优化后的代码时感到困惑,请使用 -O0 重新编译特定的相关文件。执行此操作的一个简单方法是向 make 传递一个选项:make PROFILE=-O0 file.o

实际上,COPTPROFILE 环境变量的处理方式与 PostgreSQL makefile 的完全相同。使用哪一种,取决于个人偏好,不过开发者常规做法是使用 PROFILE 进行一次性标志调整,而 COPT 可能需要一直设置。