2 17.3. Building and Installation with Autoconf and Make #
5 17.3.2. Installation Procedure
6 17.3.3. configure Options
7 17.3.4. configure Environment Variables
9 17.3.1. Short Version #
16 mkdir -p /usr/local/pgsql/data
17 chown postgres /usr/local/pgsql/data
19 /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
20 /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
21 /usr/local/pgsql/bin/createdb test
22 /usr/local/pgsql/bin/psql test
24 The long version is the rest of this section.
26 17.3.2. Installation Procedure #
29 The first step of the installation procedure is to configure the
30 source tree for your system and choose the options you would like.
31 This is done by running the configure script. For a default
32 installation simply enter:
35 This script will run a number of tests to determine values for
36 various system dependent variables and detect any quirks of your
37 operating system, and finally will create several files in the
38 build tree to record what it found.
39 You can also run configure in a directory outside the source tree,
40 and then build there, if you want to keep the build directory
41 separate from the original source files. This procedure is called a
42 VPATH build. Here's how:
45 /path/to/source/tree/configure [options go here]
48 The default configuration will build the server and utilities, as
49 well as all client applications and interfaces that require only a
50 C compiler. All files will be installed under /usr/local/pgsql by
52 You can customize the build and installation process by supplying
53 one or more command line options to configure. Typically you would
54 customize the install location, or the set of optional features
55 that are built. configure has a large number of options, which are
56 described in Section 17.3.3.
57 Also, configure responds to certain environment variables, as
58 described in Section 17.3.4. These provide additional ways to
59 customize the configuration.
61 To start the build, type either of:
65 (Remember to use GNU make.) The build will take a few minutes
66 depending on your hardware.
67 If you want to build everything that can be built, including the
68 documentation (HTML and man pages), and the additional modules
69 (contrib), type instead:
72 If you want to build everything that can be built, including the
73 additional modules (contrib), but without the documentation, type
77 If you want to invoke the build from another makefile rather than
78 manually, you must unset MAKELEVEL or set it to zero, for instance
81 $(MAKE) -C postgresql MAKELEVEL=0 all
83 Failure to do that can lead to strange error messages, typically
84 about missing header files.
86 If you want to test the newly built server before you install it,
87 you can run the regression tests at this point. The regression
88 tests are a test suite to verify that PostgreSQL runs on your
89 machine in the way the developers expected it to. Type:
92 (This won't work as root; do it as an unprivileged user.) See
93 Chapter 31 for detailed information about interpreting the test
94 results. You can repeat this test at any later time by issuing the
96 4. Installing the Files
99 If you are upgrading an existing system be sure to read
100 Section 18.6, which has instructions about upgrading a cluster.
101 To install PostgreSQL enter:
104 This will install files into the directories that were specified in
105 Step 1. Make sure that you have appropriate permissions to write
106 into that area. Normally you need to do this step as root.
107 Alternatively, you can create the target directories in advance and
108 arrange for appropriate permissions to be granted.
109 To install the documentation (HTML and man pages), enter:
112 If you built the world above, type instead:
115 This also installs the documentation.
116 If you built the world without the documentation above, type
118 make install-world-bin
120 You can use make install-strip instead of make install to strip the
121 executable files and libraries as they are installed. This will
122 save some space. If you built with debugging support, stripping
123 will effectively remove the debugging support, so it should only be
124 done if debugging is no longer needed. install-strip tries to do a
125 reasonable job saving space, but it does not have perfect knowledge
126 of how to strip every unneeded byte from an executable file, so if
127 you want to save all the disk space you possibly can, you will have
129 The standard installation provides all the header files needed for
130 client application development as well as for server-side program
131 development, such as custom functions or data types written in C.
132 Client-only installation: If you want to install only the client
133 applications and interface libraries, then you can use these
135 make -C src/bin install
136 make -C src/include install
137 make -C src/interfaces install
140 src/bin has a few binaries for server-only use, but they are small.
142 Uninstallation: To undo the installation use the command make
143 uninstall. However, this will not remove any created directories.
145 Cleaning: After the installation you can free disk space by removing
146 the built files from the source tree with the command make clean. This
147 will preserve the files made by the configure program, so that you can
148 rebuild everything with make later on. To reset the source tree to the
149 state in which it was distributed, use make distclean. If you are going
150 to build for several platforms within the same source tree you must do
151 this and re-configure for each platform. (Alternatively, use a separate
152 build tree for each platform, so that the source tree remains
155 If you perform a build and then discover that your configure options
156 were wrong, or if you change anything that configure investigates (for
157 example, software upgrades), then it's a good idea to do make distclean
158 before reconfiguring and rebuilding. Without this, your changes in
159 configuration choices might not propagate everywhere they need to.
161 17.3.3. configure Options #
163 configure's command line options are explained below. This list is not
164 exhaustive (use ./configure --help to get one that is). The options not
165 covered here are meant for advanced use-cases such as
166 cross-compilation, and are documented in the standard Autoconf
169 17.3.3.1. Installation Locations #
171 These options control where make install will put the files. The
172 --prefix option is sufficient for most cases. If you have special
173 needs, you can customize the installation subdirectories with the other
174 options described in this section. Beware however that changing the
175 relative locations of the different subdirectories may render the
176 installation non-relocatable, meaning you won't be able to move it
177 after installation. (The man and doc locations are not affected by this
178 restriction.) For relocatable installs, you might want to use the
179 --disable-rpath option described later.
182 Install all files under the directory PREFIX instead of
183 /usr/local/pgsql. The actual files will be installed into
184 various subdirectories; no files will ever be installed directly
185 into the PREFIX directory.
187 --exec-prefix=EXEC-PREFIX #
188 You can install architecture-dependent files under a different
189 prefix, EXEC-PREFIX, than what PREFIX was set to. This can be
190 useful to share architecture-independent files between hosts. If
191 you omit this, then EXEC-PREFIX is set equal to PREFIX and both
192 architecture-dependent and independent files will be installed
193 under the same tree, which is probably what you want.
196 Specifies the directory for executable programs. The default is
197 EXEC-PREFIX/bin, which normally means /usr/local/pgsql/bin.
199 --sysconfdir=DIRECTORY #
200 Sets the directory for various configuration files, PREFIX/etc
204 Sets the location to install libraries and dynamically loadable
205 modules. The default is EXEC-PREFIX/lib.
207 --includedir=DIRECTORY #
208 Sets the directory for installing C and C++ header files. The
209 default is PREFIX/include.
211 --datarootdir=DIRECTORY #
212 Sets the root directory for various types of read-only data
213 files. This only sets the default for some of the following
214 options. The default is PREFIX/share.
216 --datadir=DIRECTORY #
217 Sets the directory for read-only data files used by the
218 installed programs. The default is DATAROOTDIR. Note that this
219 has nothing to do with where your database files will be placed.
221 --localedir=DIRECTORY #
222 Sets the directory for installing locale data, in particular
223 message translation catalog files. The default is
227 The man pages that come with PostgreSQL will be installed under
228 this directory, in their respective manx subdirectories. The
229 default is DATAROOTDIR/man.
232 Sets the root directory for installing documentation files,
233 except “man” pages. This only sets the default for the following
234 options. The default value for this option is
235 DATAROOTDIR/doc/postgresql.
237 --htmldir=DIRECTORY #
238 The HTML-formatted documentation for PostgreSQL will be
239 installed under this directory. The default is DATAROOTDIR.
243 Care has been taken to make it possible to install PostgreSQL into
244 shared installation locations (such as /usr/local/include) without
245 interfering with the namespace of the rest of the system. First, the
246 string “/postgresql” is automatically appended to datadir, sysconfdir,
247 and docdir, unless the fully expanded directory name already contains
248 the string “postgres” or “pgsql”. For example, if you choose /usr/local
249 as prefix, the documentation will be installed in
250 /usr/local/doc/postgresql, but if the prefix is /opt/postgres, then it
251 will be in /opt/postgres/doc. The public C header files of the client
252 interfaces are installed into includedir and are namespace-clean. The
253 internal header files and the server header files are installed into
254 private directories under includedir. See the documentation of each
255 interface for information about how to access its header files.
256 Finally, a private subdirectory will also be created, if appropriate,
257 under libdir for dynamically loadable modules.
259 17.3.3.2. PostgreSQL Features #
261 The options described in this section enable building of various
262 PostgreSQL features that are not built by default. Most of these are
263 non-default only because they require additional software, as described
266 --enable-nls[=LANGUAGES] #
267 Enables Native Language Support (NLS), that is, the ability to
268 display a program's messages in a language other than English.
269 LANGUAGES is an optional space-separated list of codes of the
270 languages that you want supported, for example --enable-nls='de
271 fr'. (The intersection between your list and the set of actually
272 provided translations will be computed automatically.) If you do
273 not specify a list, then all available translations are
276 To use this option, you will need an implementation of the
280 Build the PL/Perl server-side language.
283 Build the PL/Python server-side language.
286 Build the PL/Tcl server-side language.
288 --with-tclconfig=DIRECTORY #
289 Tcl installs the file tclConfig.sh, which contains configuration
290 information needed to build modules interfacing to Tcl. This
291 file is normally found automatically at a well-known location,
292 but if you want to use a different version of Tcl you can
293 specify the directory in which to look for tclConfig.sh.
296 Build with support for LLVM based JIT compilation (see
297 Chapter 30). This requires the LLVM library to be installed. The
298 minimum required version of LLVM is currently 14.
300 llvm-config will be used to find the required compilation
301 options. llvm-config will be searched for in your PATH. If that
302 would not yield the desired program, use LLVM_CONFIG to specify
303 a path to the correct llvm-config. For example
305 ./configure ... --with-llvm LLVM_CONFIG='/path/to/llvm/bin/llvm-config'
307 LLVM support requires a compatible clang compiler (specified, if
308 necessary, using the CLANG environment variable), and a working
309 C++ compiler (specified, if necessary, using the CXX environment
313 Build with LZ4 compression support.
316 Build with Zstandard compression support.
319 Build with support for SSL (encrypted) connections. The only
320 LIBRARY supported is openssl, which is used for both OpenSSL and
321 LibreSSL. This requires the OpenSSL package to be installed.
322 configure will check for the required header files and libraries
323 to make sure that your OpenSSL installation is sufficient before
327 Obsolete equivalent of --with-ssl=openssl.
330 Build with support for GSSAPI authentication. MIT Kerberos is
331 required to be installed for GSSAPI. On many systems, the GSSAPI
332 system (a part of the MIT Kerberos installation) is not
333 installed in a location that is searched by default (e.g.,
334 /usr/include, /usr/lib), so you must use the options
335 --with-includes and --with-libraries in addition to this option.
336 configure will check for the required header files and libraries
337 to make sure that your GSSAPI installation is sufficient before
341 Build with LDAP support for authentication and connection
342 parameter lookup (see Section 32.18 and Section 20.10 for more
343 information). On Unix, this requires the OpenLDAP package to be
344 installed. On Windows, the default WinLDAP library is used.
345 configure will check for the required header files and libraries
346 to make sure that your OpenLDAP installation is sufficient
350 Build with PAM (Pluggable Authentication Modules) support.
353 Build with BSD Authentication support. (The BSD Authentication
354 framework is currently only available on OpenBSD.)
357 Build with support for systemd service notifications. This
358 improves integration if the server is started under systemd but
359 has no impact otherwise; see Section 18.3 for more information.
360 libsystemd and the associated header files need to be installed
364 Build with support for Bonjour automatic service discovery. This
365 requires Bonjour support in your operating system. Recommended
368 --with-uuid=LIBRARY #
369 Build the uuid-ossp module (which provides functions to generate
370 UUIDs), using the specified UUID library. LIBRARY must be one
373 + bsd to use the UUID functions found in FreeBSD and some other
375 + e2fs to use the UUID library created by the e2fsprogs project;
376 this library is present in most Linux systems and in macOS,
377 and can be obtained for other platforms as well
378 + ossp to use the OSSP UUID library
381 Obsolete equivalent of --with-uuid=ossp.
384 Build with libcurl support for OAuth 2.0 client flows. Libcurl
385 version 7.61.0 or later is required for this feature. Building
386 with this will check for the required header files and libraries
387 to make sure that your curl installation is sufficient before
391 Build with libnuma support for basic NUMA support. Only
392 supported on platforms for which the libnuma library is
396 Build with liburing, enabling io_uring support for asynchronous
399 To detect the required compiler and linker options, PostgreSQL
400 will query pkg-config.
402 To use a liburing installation that is in an unusual location,
403 you can set pkg-config-related environment variables (see its
407 Build with libxml2, enabling SQL/XML support. Libxml2 version
408 2.6.23 or later is required for this feature.
410 To detect the required compiler and linker options, PostgreSQL
411 will query pkg-config, if that is installed and knows about
412 libxml2. Otherwise the program xml2-config, which is installed
413 by libxml2, will be used if it is found. Use of pkg-config is
414 preferred, because it can deal with multi-architecture
415 installations better.
417 To use a libxml2 installation that is in an unusual location,
418 you can set pkg-config-related environment variables (see its
419 documentation), or set the environment variable XML2_CONFIG to
420 point to the xml2-config program belonging to the libxml2
421 installation, or set the variables XML2_CFLAGS and XML2_LIBS.
422 (If pkg-config is installed, then to override its idea of where
423 libxml2 is you must either set XML2_CONFIG or set both
424 XML2_CFLAGS and XML2_LIBS to nonempty strings.)
427 Build with libxslt, enabling the xml2 module to perform XSL
428 transformations of XML. --with-libxml must be specified as well.
431 Build with SElinux support, enabling the sepgsql extension.
433 17.3.3.3. Anti-Features #
435 The options described in this section allow disabling certain
436 PostgreSQL features that are built by default, but which might need to
437 be turned off if the required software or system features are not
438 available. Using these options is not recommended unless really
442 Build without support for the ICU library, disabling the use of
443 ICU collation features (see Section 23.2).
446 Prevents use of the Readline library (and libedit as well). This
447 option disables command-line editing and history in psql.
449 --with-libedit-preferred #
450 Favors the use of the BSD-licensed libedit library rather than
451 GPL-licensed Readline. This option is significant only if you
452 have both libraries installed; the default in that case is to
456 Prevents use of the Zlib library. This disables support for
457 compressed archives in pg_dump and pg_restore.
459 17.3.3.4. Build Process Details #
461 --with-includes=DIRECTORIES #
462 DIRECTORIES is a colon-separated list of directories that will
463 be added to the list the compiler searches for header files. If
464 you have optional packages (such as GNU Readline) installed in a
465 non-standard location, you have to use this option and probably
466 also the corresponding --with-libraries option.
468 Example: --with-includes=/opt/gnu/include:/usr/sup/include.
470 --with-libraries=DIRECTORIES #
471 DIRECTORIES is a colon-separated list of directories to search
472 for libraries. You will probably have to use this option (and
473 the corresponding --with-includes option) if you have packages
474 installed in non-standard locations.
476 Example: --with-libraries=/opt/gnu/lib:/usr/sup/lib.
478 --with-system-tzdata=DIRECTORY #
479 PostgreSQL includes its own time zone database, which it
480 requires for date and time operations. This time zone database
481 is in fact compatible with the IANA time zone database provided
482 by many operating systems such as FreeBSD, Linux, and Solaris,
483 so it would be redundant to install it again. When this option
484 is used, the system-supplied time zone database in DIRECTORY is
485 used instead of the one included in the PostgreSQL source
486 distribution. DIRECTORY must be specified as an absolute path.
487 /usr/share/zoneinfo is a likely directory on some operating
488 systems. Note that the installation routine will not detect
489 mismatching or erroneous time zone data. If you use this option,
490 you are advised to run the regression tests to verify that the
491 time zone data you have pointed to works correctly with
494 This option is mainly aimed at binary package distributors who
495 know their target operating system well. The main advantage of
496 using this option is that the PostgreSQL package won't need to
497 be upgraded whenever any of the many local daylight-saving time
498 rules change. Another advantage is that PostgreSQL can be
499 cross-compiled more straightforwardly if the time zone database
500 files do not need to be built during the installation.
502 --with-extra-version=STRING #
503 Append STRING to the PostgreSQL version number. You can use
504 this, for example, to mark binaries built from unreleased Git
505 snapshots or containing custom patches with an extra version
506 string, such as a git describe identifier or a distribution
507 package release number.
510 Do not mark PostgreSQL's executables to indicate that they
511 should search for shared libraries in the installation's library
512 directory (see --libdir). On most platforms, this marking uses
513 an absolute path to the library directory, so that it will be
514 unhelpful if you relocate the installation later. However, you
515 will then need to provide some other way for the executables to
516 find the shared libraries. Typically this requires configuring
517 the operating system's dynamic linker to search the library
518 directory; see Section 17.5.1 for more detail.
520 17.3.3.5. Miscellaneous #
522 It's fairly common, particularly for test builds, to adjust the default
523 port number with --with-pgport. The other options in this section are
524 recommended only for advanced users.
526 --with-pgport=NUMBER #
527 Set NUMBER as the default port number for server and clients.
528 The default is 5432. The port can always be changed later on,
529 but if you specify it here then both server and clients will
530 have the same default compiled in, which can be very convenient.
531 Usually the only good reason to select a non-default value is if
532 you intend to run multiple PostgreSQL servers on the same
535 --with-krb-srvnam=NAME #
536 The default name of the Kerberos service principal used by
537 GSSAPI. postgres is the default. There's usually no reason to
538 change this unless you are building for a Windows environment,
539 in which case it must be set to upper case POSTGRES.
541 --with-segsize=SEGSIZE #
542 Set the segment size, in gigabytes. Large tables are divided
543 into multiple operating-system files, each of size equal to the
544 segment size. This avoids problems with file size limits that
545 exist on many platforms. The default segment size, 1 gigabyte,
546 is safe on all supported platforms. If your operating system has
547 “largefile” support (which most do, nowadays), you can use a
548 larger segment size. This can be helpful to reduce the number of
549 file descriptors consumed when working with very large tables.
550 But be careful not to select a value larger than is supported by
551 your platform and the file systems you intend to use. Other
552 tools you might wish to use, such as tar, could also set limits
553 on the usable file size. It is recommended, though not
554 absolutely required, that this value be a power of 2. Note that
555 changing this value breaks on-disk database compatibility,
556 meaning you cannot use pg_upgrade to upgrade to a build with a
557 different segment size.
559 --with-blocksize=BLOCKSIZE #
560 Set the block size, in kilobytes. This is the unit of storage
561 and I/O within tables. The default, 8 kilobytes, is suitable for
562 most situations; but other values may be useful in special
563 cases. The value must be a power of 2 between 1 and 32
564 (kilobytes). Note that changing this value breaks on-disk
565 database compatibility, meaning you cannot use pg_upgrade to
566 upgrade to a build with a different block size.
568 --with-wal-blocksize=BLOCKSIZE #
569 Set the WAL block size, in kilobytes. This is the unit of
570 storage and I/O within the WAL log. The default, 8 kilobytes, is
571 suitable for most situations; but other values may be useful in
572 special cases. The value must be a power of 2 between 1 and 64
573 (kilobytes). Note that changing this value breaks on-disk
574 database compatibility, meaning you cannot use pg_upgrade to
575 upgrade to a build with a different WAL block size.
577 17.3.3.6. Developer Options #
579 Most of the options in this section are only of interest for developing
580 or debugging PostgreSQL. They are not recommended for production
581 builds, except for --enable-debug, which can be useful to enable
582 detailed bug reports in the unlucky event that you encounter a bug. On
583 platforms supporting DTrace, --enable-dtrace may also be reasonable to
586 When building an installation that will be used to develop code inside
587 the server, it is recommended to use at least the options
588 --enable-debug and --enable-cassert.
591 Compiles all programs and libraries with debugging symbols. This
592 means that you can run the programs in a debugger to analyze
593 problems. This enlarges the size of the installed executables
594 considerably, and on non-GCC compilers it usually also disables
595 compiler optimization, causing slowdowns. However, having the
596 symbols available is extremely helpful for dealing with any
597 problems that might arise. Currently, this option is recommended
598 for production installations only if you use GCC. But you should
599 always have it on if you are doing development work or running a
603 Enables assertion checks in the server, which test for many
604 “cannot happen” conditions. This is invaluable for code
605 development purposes, but the tests can slow down the server
606 significantly. Also, having the tests turned on won't
607 necessarily enhance the stability of your server! The assertion
608 checks are not categorized for severity, and so what might be a
609 relatively harmless bug will still lead to server restarts if it
610 triggers an assertion failure. This option is not recommended
611 for production use, but you should have it on for development
612 work or when running a beta version.
615 Enable tests using the Perl TAP tools. This requires a Perl
616 installation and the Perl module IPC::Run. See Section 31.4 for
620 Enables automatic dependency tracking. With this option, the
621 makefiles are set up so that all affected object files will be
622 rebuilt when any header file is changed. This is useful if you
623 are doing development work, but is just wasted overhead if you
624 intend only to compile once and install. At present, this option
628 If using GCC, all programs and libraries are compiled with code
629 coverage testing instrumentation. When run, they generate files
630 in the build directory with code coverage metrics. See
631 Section 31.5 for more information. This option is for use only
632 with GCC and when doing development work.
635 If using GCC, all programs and libraries are compiled so they
636 can be profiled. On backend exit, a subdirectory will be created
637 that contains the gmon.out file containing profile data. This
638 option is for use only with GCC and when doing development work.
641 Compiles PostgreSQL with support for the dynamic tracing tool
642 DTrace. See Section 27.5 for more information.
644 To point to the dtrace program, the environment variable DTRACE
645 can be set. This will often be necessary because dtrace is
646 typically installed under /usr/sbin, which might not be in your
649 Extra command-line options for the dtrace program can be
650 specified in the environment variable DTRACEFLAGS. On Solaris,
651 to include DTrace support in a 64-bit binary, you must specify
652 DTRACEFLAGS="-64". For example, using the GCC compiler:
654 ./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...
656 Using Sun's compiler:
658 ./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFL
661 --enable-injection-points #
662 Compiles PostgreSQL with support for injection points in the
663 server. Injection points allow to run user-defined code from
664 within the server in pre-defined code paths. This helps in
665 testing and in the investigation of concurrency scenarios in a
666 controlled fashion. This option is disabled by default. See
667 Section 36.10.14 for more details. This option is intended to be
668 used only by developers for testing.
670 --with-segsize-blocks=SEGSIZE_BLOCKS #
671 Specify the relation segment size in blocks. If both
672 --with-segsize and this option are specified, this option wins.
673 This option is only for developers, to test segment related
676 17.3.4. configure Environment Variables #
678 In addition to the ordinary command-line options described above,
679 configure responds to a number of environment variables. You can
680 specify environment variables on the configure command line, for
682 ./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'
684 In this usage an environment variable is little different from a
685 command-line option. You can also set such variables beforehand:
686 export CC=/opt/bin/gcc
687 export CFLAGS='-O2 -pipe'
690 This usage can be convenient because many programs' configuration
691 scripts respond to these variables in similar ways.
693 The most commonly used of these environment variables are CC and
694 CFLAGS. If you prefer a C compiler different from the one configure
695 picks, you can set the variable CC to the program of your choice. By
696 default, configure will pick gcc if available, else the platform's
697 default (usually cc). Similarly, you can override the default compiler
698 flags if needed with the CFLAGS variable.
700 Here is a list of the significant variables that can be set in this
710 options to pass to the C compiler
713 path to clang program used to process source code for inlining
714 when compiling with --with-llvm
720 options to pass to the C preprocessor
726 options to pass to the C++ compiler
729 location of the dtrace program
732 options to pass to the dtrace program
738 options to use when linking either executables or shared
742 additional options for linking executables only
745 additional options for linking shared libraries only
748 llvm-config program used to locate the LLVM installation
751 msgfmt program for native language support
754 Perl interpreter program. This will be used to determine the
755 dependencies for building PL/Perl. The default is perl.
758 Python interpreter program. This will be used to determine the
759 dependencies for building PL/Python. If this is not set, the
760 following are probed in this order: python3 python.
763 Tcl interpreter program. This will be used to determine the
764 dependencies for building PL/Tcl. If this is not set, the
765 following are probed in this order: tclsh tcl tclsh8.6 tclsh86
766 tclsh8.5 tclsh85 tclsh8.4 tclsh84.
769 xml2-config program used to locate the libxml2 installation
771 Sometimes it is useful to add compiler flags after-the-fact to the set
772 that were chosen by configure. An important example is that gcc's
773 -Werror option cannot be included in the CFLAGS passed to configure,
774 because it will break many of configure's built-in tests. To add such
775 flags, include them in the COPT environment variable while running
776 make. The contents of COPT are added to the CFLAGS, CXXFLAGS, and
777 LDFLAGS options set up by configure. For example, you could do
781 export COPT='-Werror'
786 If using GCC, it is best to build with an optimization level of at
787 least -O1, because using no optimization (-O0) disables some important
788 compiler warnings (such as the use of uninitialized variables).
789 However, non-zero optimization levels can complicate debugging because
790 stepping through compiled code will usually not match up one-to-one
791 with source code lines. If you get confused while trying to debug
792 optimized code, recompile the specific files of interest with -O0. An
793 easy way to do this is by passing an option to make: make PROFILE=-O0
796 The COPT and PROFILE environment variables are actually handled
797 identically by the PostgreSQL makefiles. Which to use is a matter of
798 preference, but a common habit among developers is to use PROFILE for
799 one-time flag adjustments, while COPT might be kept set all the time.