2024年9月26日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16
开发版本:开发版

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

  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
    

    (以 root 身份运行此操作无效;请以非特权用户身份运行。)有关解释测试结果的详细信息,请参见第 31 章。您可以稍后通过发出相同的命令来重复此测试。

  4. 安装文件

    注意

    如果您正在升级现有系统,请务必阅读18.6 节,其中包含有关升级集群的说明。

    要安装 PostgreSQL,请输入

    make install
    

    这会将文件安装到步骤 1中指定的目录中。确保您具有写入该区域的适当权限。通常,您需要以 root 身份执行此步骤。或者,您可以提前创建目标目录并安排授予适当的权限。

    要安装文档(HTML 和手册页),请输入

    make install-docs
    

    如果您在上面构建了整个世界,请改用以下命令:

    make install-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 将用于查找所需的编译选项。llvm-config 将在您的 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 #

构建对SSL(加密)连接的支持。唯一支持的 LIBRARYopenssl。这需要安装 OpenSSL 软件包。configure 将检查所需的标头文件和库,以确保您的 OpenSSL 安装在继续之前足够。

--with-openssl #

--with-ssl=openssl 的已弃用等效项。

--with-gssapi #

构建对 GSSAPI 身份验证的支持。需要安装 MIT Kerberos 才能使用 GSSAPI。在许多系统上,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 #

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 #

设置 段大小(以 GB 为单位)。大型表被分成多个操作系统文件,每个文件的大小等于段大小。这避免了许多平台上存在的文件大小限制问题。默认段大小为 1GB,在所有支持的平台上都是安全的。如果您的操作系统支持 largefile(现在大多数操作系统都支持),则可以使用更大的段大小。这有助于减少处理非常大的表时消耗的文件描述符数量。但请注意,不要选择大于您的平台和您打算使用的文件系统支持的值。您可能希望使用的其他工具(如 tar)也可能会对可用文件大小设置限制。建议(尽管不是绝对要求)此值为 2 的幂。请注意,更改此值会破坏磁盘上的数据库兼容性,这意味着您无法使用 pg_upgrade 升级到具有不同段大小的构建。

--with-blocksize=BLOCKSIZE #

设置 块大小(以 KB 为单位)。这是表内存储和 I/O 的单位。默认值 8KB 适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 32(KB)之间的 2 的幂。请注意,更改此值会破坏磁盘上的数据库兼容性,这意味着您无法使用 pg_upgrade 升级到具有不同块大小的构建。

--with-wal-blocksize=BLOCKSIZE #

设置 WAL 块大小(以 KB 为单位)。这是 WAL 日志内存储和 I/O 的单位。默认值 8KB 适用于大多数情况;但在特殊情况下,其他值可能有用。该值必须是 1 到 64(KB)之间的 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 #

编译 PostgreSQL 以支持动态跟踪工具 DTrace。有关更多信息,请参见第 27.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' ...
--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 #

用于处理内联源代码的clang程序的路径,在使用--with-llvm编译时使用

CPP #

C 预处理器

CPPFLAGS #

传递给 C 预处理器的选项

CXX #

C++ 编译器

CXXFLAGS #

传递给 C++ 编译器的选项

DTRACE #

dtrace程序的位置

DTRACEFLAGS #

传递给dtrace程序的选项

FLEX #

Flex 程序

LDFLAGS #

链接可执行文件或共享库时使用的选项

LDFLAGS_EX #

仅链接可执行文件的附加选项

LDFLAGS_SL #

仅链接共享库的附加选项

LLVM_CONFIG #

用于查找 LLVM 安装的llvm-config程序

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 #

用于查找 libxml2 安装的xml2-config程序

有时,需要在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可能一直保持设置状态。

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用此表单报告文档问题。