2025年9月25日: PostgreSQL 18 发布!
支持的版本:当前 (18) / 17 / 16
开发版本:devel

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 和 man 页)以及额外的模块(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 和 man 页),请输入:

    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 一起提供的 man 页将安装在此目录下的相应 manx 子目录中。默认值为 DATAROOTDIR/man

--docdir=DIRECTORY #

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

--htmldir=DIRECTORY #

PostgreSQL 的 HTML 格式文档将安装在此目录下。默认值为 DATAROOTDIR

注意

我们已仔细考虑了将 PostgreSQL 安装到共享安装位置(如 /usr/local/include)而不会干扰系统其他部分的命名空间。首先,字符串“/postgresql”会自动追加到 datadirsysconfdirdocdir,除非完全展开的目录名已包含字符串“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] #

启用本地语言支持(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 版本是 14。

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,它同时用于 OpenSSLLibreSSL。这需要安装 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-ossp 模块(提供生成 UUID 的函数),使用指定的 UUID 库。 LIBRARY 必须是以下之一:

  • bsd 使用 FreeBSD 和其他一些 BSD 派生系统中找到的 UUID 函数

  • e2fs 使用 e2fsprogs 项目创建的 UUID 库;此库存在于大多数 Linux 系统和 macOS 中,并且也可以在其他平台上获得

  • ossp 使用 OSSP UUID 库

--with-ossp-uuid #

过时的 --with-uuid=ossp 等效项。

--with-libcurl #

构建时支持 libcurl 以实现 OAuth 2.0 客户端流程。此功能需要 libcurl 版本 7.61.0 或更高版本。使用此选项构建将检查所需的头文件和库,以确保您的 curl 安装足够,然后再继续。

--with-libnuma #

构建时支持 libnuma 以实现基本的 NUMA 支持。仅在实现了 libnuma 库的平台上受支持。

--with-liburing #

构建时支持 liburing,启用 io_uring 支持以实现异步 I/O。

为了检测所需的编译器和链接器选项,PostgreSQL 将查询 pkg-config

要使用位于非标准位置的 liburing 安装,您可以设置与 pkg-config 相关的环境变量(请参阅其文档)。

--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 中对压缩存档的支持。

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=目录 #

PostgreSQL 包含自己的时区数据库,这是进行日期和时间操作所必需的。此时区数据库实际上与许多操作系统(如 FreeBSD、Linux 和 Solaris)提供的 IANA 时区数据库兼容,因此再次安装它是多余的。使用此选项时,将使用 目录 中的系统提供的时区数据库,而不是 PostgreSQL 源代码发行版中包含的数据库。目录 必须指定为绝对路径。/usr/share/zoneinfo 是某些操作系统上可能存在的目录。请注意,安装例程不会检测不匹配或错误的时区数据。如果您使用此选项,建议运行回归测试以验证您指定时区数据的有效性。

此选项主要面向了解其目标操作系统的二进制包分发者。使用此选项的主要优点是,每当许多本地夏令时规则发生更改时,无需升级 PostgreSQL 包。另一个优点是,如果时区数据库文件不需要在安装过程中构建,则可以更直接地交叉编译 PostgreSQL。

--with-extra-version=字符串 #

字符串 追加到 PostgreSQL 版本号。例如,您可以使用此选项来标记从未发布的 Git 快照构建或包含自定义补丁的二进制文件,并附加一个额外的版本字符串,例如 git describe 标识符或分发包的发行号。

--disable-rpath #

不标记 PostgreSQL 的可执行文件,指示它们应该在安装的库目录中搜索共享库(请参阅 --libdir)。在大多数平台上,此标记使用库目录的绝对路径,因此如果您以后重新定位安装,它将无用。但是,您需要通过其他方式让可执行文件找到共享库。这通常需要配置操作系统的动态链接器以搜索库目录;有关更多详细信息,请参阅 第 17.5.1 节

17.3.3.5. 杂项 #

通常,特别是在测试构建中,会使用 --with-pgport 来调整默认端口号。本节中的其他选项仅推荐给高级用户。

--with-pgport=数字 #

数字 设置为服务器和客户端的默认端口号。默认值为 5432。端口可以随时更改,但如果在此处指定,则服务器和客户端都将具有相同的默认编译值,这可能非常方便。通常,选择非默认值的唯一好理由是您打算在同一台机器上运行多个 PostgreSQL 服务器。

--with-krb-srvnam=名称 #

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)。但如果您正在进行开发工作或运行 beta 版本,则应始终启用它。

--enable-cassert #

在服务器中启用“断言”检查,它会测试许多“不可能发生”的条件。这对于代码开发非常有用,但测试可能会显著降低服务器速度。此外,启用测试不一定会提高服务器的稳定性!断言检查未按严重程度分类,因此相对无害的 bug 也会在触发断言失败时导致服务器重启。此选项不推荐用于生产环境,但您应该在开发工作或运行 beta 版本时启用它。

--enable-tap-tests #

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

--enable-depend #

启用自动依赖项跟踪。使用此选项,makefiles 会设置好,以便在任何头文件发生更改时都会重新构建所有受影响的目标文件。如果您正在进行开发工作,这很有用,但如果您打算只编译一次并安装,则只是浪费开销。目前,此选项仅适用于 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.14 节。此选项仅供开发人员用于测试。

--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 安装的 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 设置的 CFLAGSCXXFLAGSLDFLAGS 选项中。例如,您可以这样做

make COPT='-Werror'

export COPT='-Werror'
make

注意

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

PostgreSQL makefiles 实际上以相同的方式处理 COPTPROFILE 环境变量。使用哪一个取决于个人偏好,但开发者中一种常见的习惯是使用 PROFILE 进行一次性标志调整,而 COPT 可能会一直保持设置状态。

提交更正

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