./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
長版本是本 章節 的其餘部分。
組態
安裝程序的第一個步驟是為您的系統組態原始程式碼樹,並選擇您想要的選項。這是透過執行 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 節 中所述。這些提供了自訂組態的其他方式。
建置
若要開始建置,請輸入下列任一指令
make
make all
(請記得使用 GNU make。)建置時間會依您的硬體而定,需要幾分鐘的時間。
如果您想建置所有可以建置的項目,包括文件 (HTML 和手冊頁面) 和其他模組 (contrib
),請改輸入
make world
如果您想建置所有可以建置的項目,包括其他模組 (contrib
),但不要文件,請改輸入
make world-bin
如果您想從另一個 makefile 呼叫建置,而不是手動建置,您必須取消設定 MAKELEVEL
或將其設定為零,例如像這樣
build-postgresql: $(MAKE) -C postgresql MAKELEVEL=0 all
未執行此動作可能會導致奇怪的錯誤訊息,通常是關於遺失標頭檔。
回歸測試
如果您想在安裝新建立的伺服器之前測試它,您可以此時執行回歸測試。回歸測試是一組測試套件,用於驗證 PostgreSQL 在您的機器上執行的方式,是否符合開發人員的預期。請輸入
make check
(這無法以 root 身分執行;請以非特權使用者身分執行。)請參閱 第 33 章,以取得關於解釋測試結果的詳細資訊。您可以稍後隨時透過發出相同的指令來重複此測試。
安裝檔案
如果您要升級現有的系統,請務必閱讀 第 19.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
。否則,您在組態選項中的變更可能無法傳播到所有需要的地方。
configure
選項 #configure
的命令列選項說明如下。此清單並非詳盡無遺 (請使用 ./configure --help
取得詳盡清單)。未在此處涵蓋的選項是針對進階使用案例 (例如交叉編譯),並在標準 Autoconf 文件中說明。
這些選項控制 make install
將放置檔案的位置。--prefix
選項足以應付大多數情況。如果您有特殊需求,您可以使用本節中說明的其他選項自訂安裝子目錄。但請注意,變更不同子目錄的相對位置可能會使安裝無法重新定位,表示您在安裝後將無法移動它。(man
和 doc
位置不受此限制影響。) 對於可重新定位的安裝,您可能想使用稍後說明的 --disable-rpath
選項。
--prefix=PREFIX
#將所有檔案安裝在目錄 PREFIX
下,而非 /usr/local/pgsql
。實際的檔案將會安裝到各種子目錄中;不會有任何檔案直接安裝到 PREFIX
目錄中。
--exec-prefix=EXEC-PREFIX
#您可以將架構相關檔案安裝在不同的前置詞 EXEC-PREFIX
下,而不是 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=目錄
#設定已安裝程式所使用的唯讀資料檔案目錄。預設為
。請注意,這與資料庫檔案放置位置無關。DATAROOTDIR
--localedir=目錄
#設定安裝語言資料的目錄,特別是訊息翻譯目錄檔案。預設為
。DATAROOTDIR
/locale
--mandir=目錄
#隨附 PostgreSQL 的手冊頁將安裝在此目錄下,位於各自的 man
子目錄中。預設為 x
。DATAROOTDIR
/man
--docdir=目錄
#設定安裝文件檔案的根目錄,但「手冊」頁除外。這只會設定下列選項的預設值。此選項的預設值為
。DATAROOTDIR
/doc/postgresql
--htmldir=目錄
#以 HTML 格式編寫的 PostgreSQL 文件將安裝在此目錄下。預設為
。DATAROOTDIR
我們已謹慎處理,讓 PostgreSQL 可以安裝在共用安裝位置(例如 /usr/local/include
),而不會干擾系統其他部分的命名空間。首先,字串 “/postgresql
” 會自動附加到 datadir
、sysconfdir
和 docdir
,除非已完全展開的目錄名稱已包含字串 “postgres
” 或 “pgsql
”。例如,如果您選擇 /usr/local
作為前置詞,文件將安裝在 /usr/local/doc/postgresql
中,但如果前置詞是 /opt/postgres
,則文件將安裝在 /opt/postgres/doc
中。用戶端介面的公開 C 標頭檔案安裝在 includedir
中,且命名空間乾淨。內部標頭檔案和伺服器標頭檔案安裝在 includedir
下的私人目錄中。請參閱各介面的文件,以了解如何存取其標頭檔案。最後,如果適當,也會在 libdir
下建立私人子目錄,以供動態載入模組使用。
本節所述的選項可建置各種預設未建置的 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
#建置支援 LLVM 的 JIT 編譯 (請參閱 第 32 章)。這需要安裝 LLVM 函式庫。目前 LLVM 所需的最低版本為 3.9。
llvm-config
將用於尋找必要的編譯選項。 llvm-config
,然後 llvm-config-$major-$minor
將在您的 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(加密)連線進行建置。唯一支援的 LIBRARY
是 openssl
。這需要安裝 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 進行建置,以支援驗證和連線參數查詢(請參閱 第 34.18 節 和 第 21.10 節 以取得更多資訊)。在 Unix 上,這需要安裝 OpenLDAP 套件。在 Windows 上,會使用預設的 WinLDAP 函式庫。 configure
會檢查所需的標頭檔案和函式庫,以確保您的 OpenLDAP 安裝在繼續進行之前已足夠。
--with-pam
#--with-bsd-auth
#使用 BSD 驗證支援進行建置。(BSD 驗證架構目前僅在 OpenBSD 上提供。)
--with-systemd
#使用 systemd 服務通知支援進行建置。如果伺服器是在 systemd 下啟動,但沒有其他影響,則這會改善整合;請參閱 第 19.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_CFLAGS
和 XML2_LIBS
。(如果已安裝 pkg-config
,則要覆寫其對 libxml2 所在位置的想法,您必須設定 XML2_CONFIG
或同時設定 XML2_CFLAGS
和 XML2_LIBS
為非空字串。)
--with-libxslt
#使用 libxslt 建置,啟用 xml2 模組執行 XML 的 XSL 轉換。也必須指定 --with-libxml
。
本節所述的選項允許停用某些預設建置的 PostgreSQL 功能,但如果沒有必要的軟體或系統功能,可能需要關閉這些功能。除非真的有必要,否則不建議使用這些選項。
--without-icu
#不支援 ICU 函式庫建置,停用 ICU 校對功能 (請參閱 第 24.2 節)。
--without-readline
#防止使用 Readline 函式庫(以及 libedit)。此選項會停用 psql 中的命令列編輯和記錄。
--with-libedit-preferred
#偏好使用 BSD 授權的 libedit 函式庫,而非 GPL 授權的 Readline。只有在您已安裝這兩個函式庫時,此選項才有意義;在這種情況下,預設會使用 Readline。
--without-zlib
#--disable-spinlocks
#即使 PostgreSQL 沒有平台的 CPU 自旋鎖支援,仍允許建置成功。缺乏自旋鎖支援將導致效能極差;因此,只有在建置中斷並通知您平台缺乏自旋鎖支援時,才應使用此選項。如果在您的平台上建置 PostgreSQL 需要此選項,請向 PostgreSQL 開發人員回報問題。
--disable-atomics
#停用 CPU 原子操作。此選項在缺乏此類操作的平台上不執行任何動作。在有此類操作的平台上,這將導致效能不佳。此選項僅適用於除錯或進行效能比較。
--disable-thread-safety
#停用用戶端函式庫的執行緒安全性。這會防止 libpq 和 ECPG 程式中的並行執行緒安全地控制其私人連線控制代碼。僅在執行緒支援不足的平台上使用此選項。
--with-includes=DIRECTORIES
#DIRECTORIES
是以冒號分隔的目錄清單,將會新增到編譯器搜尋標頭檔的清單中。如果您有安裝在非標準位置的選用套件(例如 GNU Readline),您必須使用此選項,而且可能也需要對應的 --with-libraries
選項。
範例:--with-includes=/opt/gnu/include:/usr/sup/include
。
--with-libraries=目錄
#目錄
是用來搜尋函式庫的目錄清單,各目錄以冒號分隔。如果你有安裝在非標準位置的套件,你可能必須使用這個選項(以及對應的 --with-includes
選項)。
範例:--with-libraries=/opt/gnu/lib:/usr/sup/lib
。
--with-system-tzdata=目錄
#PostgreSQL 包含它自己的時區資料庫,這是它進行日期和時間運算所需要的。事實上,這個時區資料庫與許多作業系統(例如 FreeBSD、Linux 和 Solaris)提供的 IANA 時區資料庫相容,所以再次安裝它會是多餘的。當使用這個選項時,會使用 目錄
中由系統提供的時區資料庫,而不是 PostgreSQL 原始碼發行版中包含的時區資料庫。必須將 目錄
指定為絕對路徑。在某些作業系統中,/usr/share/zoneinfo
是可能的目錄。請注意,安裝例程不會偵測不匹配或錯誤的時區資料。如果你使用這個選項,建議你執行回歸測試,以驗證你所指出的時區資料是否能與 PostgreSQL 正確運作。
這個選項主要是針對二進位套件發行者,他們很瞭解他們的目標作業系統。使用這個選項的主要好處是,當許多本地的夏令時規則有任何變更時,PostgreSQL 套件就不需要升級。另一個好處是,如果在安裝期間不需要建置時區資料庫檔案,PostgreSQL 可以更直接地進行交叉編譯。
--with-extra-version=字串
#將 字串
附加到 PostgreSQL 版本號碼。例如,你可以使用它來標記從未發布的 Git 快照或包含自訂修補程式的二進位檔案,並使用額外的版本字串,例如 git describe
識別碼或發行套件版本號碼。
--disable-rpath
#不要標記 PostgreSQL 的可執行檔,以指出它們應該在安裝的函式庫目錄中搜尋共用函式庫(請參閱 --libdir
)。在大部分的平台上,這個標記會使用函式庫目錄的絕對路徑,因此如果你稍後重新配置安裝,它將沒有幫助。但是,你之後需要提供其他方法,讓可執行檔可以找到共用函式庫。通常這需要設定作業系統的動態連結器,以搜尋函式庫目錄;請參閱 第 17.5.1 節 以取得更多詳細資料。
特別是對於測試建置而言,使用 --with-pgport
調整預設連接埠號碼是很常見的。此部分中的其他選項僅建議進階使用者使用。
--with-pgport=數字
#將 數字
設定為伺服器和用戶端預設的連接埠號碼。預設為 5432。連接埠日後可以隨時變更,但如果您在此處指定,則伺服器和用戶端都會內建相同的預設值,這可能會非常方便。通常,選擇非預設值唯一正當的理由是您打算在同一台機器上執行多個 PostgreSQL 伺服器。
--with-krb-srvnam=名稱
#GSSAPI 使用的 Kerberos 服務主體預設名稱。預設為 postgres
。通常沒有理由變更此設定,除非您要建置 Windows 環境,在此情況下必須設定為大寫的 POSTGRES
。
--with-segsize=區段大小
#設定 區段大小,單位為 GB。大型表格會分割成多個作業系統檔案,每個檔案的大小等於區段大小。這可以避免許多平台上存在的檔案大小限制問題。預設區段大小為 1 GB,在所有支援的平台上都是安全的。如果您的作業系統支援 “大檔案”(現今大多數作業系統都支援),您可以使用較大的區段大小。這有助於減少使用非常大型表格時消耗的檔案描述符數量。但請小心不要選擇大於您的平台和您打算使用的檔案系統所支援的值。您可能想要使用的其他工具,例如 tar,也可以設定可用檔案大小的限制。建議(但非絕對必要)此值為 2 的次方。請注意,變更此值會中斷磁碟上資料庫的相容性,表示您無法使用 pg_upgrade
升級到具有不同區段大小的建置。
--with-blocksize=區塊大小
#設定區塊大小,單位為 KB。這是表格中儲存和 I/O 的單位。預設為 8 KB,適合大多數情況;但在特殊情況下,其他值可能有用。值必須是 1 到 32(KB)之間的 2 的次方。請注意,變更此值會中斷磁碟上的資料庫相容性,表示您無法使用pg_upgrade
升級到具有不同區塊大小的組建。
--with-wal-blocksize=區塊大小
#設定WAL 區塊大小,單位為 KB。這是 WAL 記錄中儲存和 I/O 的單位。預設為 8 KB,適合大多數情況;但在特殊情況下,其他值可能有用。值必須是 1 到 64(KB)之間的 2 的次方。請注意,變更此值會中斷磁碟上的資料庫相容性,表示您無法使用pg_upgrade
升級到具有不同 WAL 區塊大小的組建。
此部分中的大多數選項僅對開發或除錯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
。 請參閱第 33.4 節以取得更多資訊。
--enable-depend
#啟用自動相依性追蹤。使用此選項,makefile 會設定為在任何標頭檔變更時,重新建置所有受影響的物件檔。如果您正在進行開發工作,這會很有用,但如果您只想編譯一次並安裝,這只是浪費資源。目前,此選項僅適用於 GCC。
--enable-coverage
#如果使用 GCC,所有程式和函式庫都會編譯為程式碼覆蓋率測試工具。執行時,它們會在建置目錄中產生包含程式碼覆蓋率指標的檔案。 請參閱第 33.5 節以取得更多資訊。 此選項僅供搭配 GCC 使用,且在進行開發工作時使用。
--enable-profiling
#如果使用 GCC,所有程式和函式庫都編譯成可進行剖析。在後端結束時,將會建立一個子目錄,其中包含含有剖析資料的 gmon.out
檔案。此選項僅可與 GCC 搭配使用,且在進行開發工作時使用。
--enable-dtrace
#編譯 PostgreSQL,並支援動態追蹤工具 DTrace。 請參閱 第 28.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' ...
--with-segsize-blocks=SEGSIZE_BLOCKS
#以區塊為單位指定關聯區段大小。如果同時指定 --with-segsize
和此選項,則此選項會優先。此選項僅供開發人員使用,用於測試與區段相關的程式碼。
configure
環境變數 #除了上述的常規命令列選項之外,configure
還會回應多個環境變數。您可以在 configure
命令列中指定環境變數,例如
./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'
在此用法中,環境變數與命令列選項幾乎沒有區別。您也可以事先設定此類變數
export CC=/opt/bin/gcc
export CFLAGS='-O2 -pipe'
./configure
此用法很方便,因為許多程式的設定指令碼都會以類似的方式回應這些變數。
這些環境變數中最常用的為 CC
和 CFLAGS
。如果您偏好與 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-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
選項無法包含在傳遞給 configure
的 CFLAGS
中,因為它會中斷 configure
的許多內建測試。若要加入此類旗標,請在執行 make
時將它們包含在 COPT
環境變數中。 COPT
的內容會加入 configure
設定的 CFLAGS
和 LDFLAGS
選項中。例如,您可以執行
make COPT='-Werror'
或
export COPT='-Werror'
make
如果使用 GCC,最好使用至少 -O1
的最佳化層級來建置,因為不使用最佳化 (-O0
) 會停用一些重要的編譯器警告(例如使用未初始化的變數)。但是,非零最佳化層級會使除錯複雜化,因為逐行執行已編譯的程式碼通常不會與原始碼行一一對應。如果您在嘗試除錯最佳化程式碼時感到困惑,請使用 -O0
重新編譯特定感興趣的檔案。執行此操作的簡單方法是傳遞一個選項給 make:make PROFILE=-O0 file.o
。
實際上,PostgreSQL makefile 會以相同的方式處理 COPT
和 PROFILE
環境變數。要使用哪一個取決於個人喜好,但開發人員的常見習慣是將 PROFILE
用於一次性旗標調整,而 COPT
可能會一直保持設定。
如果您在文件當中看到任何不正確、與您在特定功能上的經驗不符,或需要進一步說明的地方,請使用此表單回報文件問題。