支持的版本: 当前 (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,除非完全展开的目录名已包含字符串 postgrespgsql。例如,如果选择 /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-librariesconfigure 将检查所需的头文件和库,以确保您的 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 或更高版本。

为了检测所需的编译器和链接器选项,如果安装了 pkg-config 并且了解 libxml2,则 PostgreSQL 将查询 pkg-config。 否则,如果找到,将使用 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 #

以千兆字节为单位设置段大小。大型表被分为多个操作系统文件,每个文件的大小等于段大小。这避免了许多平台上存在的文件大小限制问题。默认段大小(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 #

编译 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 #

使用 --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 设置的 CFLAGSLDFLAGS 选项中。例如,您可以执行

make COPT='-Werror'

export COPT='-Werror'
make

注意

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

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

提交更正

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