<-
Apache > HTTP伺服器 > 文件 > 版本 2.4 > 特定平台注意事項

在 Microsoft Windows 上編譯 Apache

可用語言:  en  |  fr  |  ko 

在開始編譯 Apache HTTP 伺服器 (httpd) 之前,有許多重要事項需要考量。開始之前,請參閱 在 Microsoft Windows 上使用 Apache HTTP 伺服器

httpd 可使用 httpd 開發人員維護的基於 cmake 的建置系統或 Visual Studio 專案檔案在 Windows 上建置。基於 cmake 的建置系統直接支援更多版本的 Visual Studio,但目前有相當多的功能限制。

Support Apache!

另請參閱

top

使用隨附的 Visual Studio 專案檔案建置 httpd

需求

編譯 Apache 需要已正確安裝下列環境

從 Unix 來源組建

Apache HTTP Server 專案的政策僅釋出 Unix 來源。Windows 來源套件由志工提供,並且可能不會在每個版本中提供。您仍然可以針對 Windows 從 Unix 來源 tarball 組建伺服器,只需幾個額外步驟。

  1. 下載並解壓縮最新版本的 Unix 來源 tarball。
  2. 下載並解壓縮最新版本的 APR、AR-Util 和 APR-Iconv Unix 來源 tarball,將這些來源放置在目錄 httpd-2.x.x\srclib\apr、httpd-2.x.x\srclib\apr-util 和 httpd-2.x.x\srclib\apr-iconv
  3. 開啟命令提示字元並將 CD 輸入至 httpd-2.x.x 資料夾
  4. 在提示字元處執行行結尾轉換工具;

perl srclib\apr\build\lineends.pl

您現在可以使用 IDE,透過 Visual Studio 開發環境組建伺服器。除非您如下方說明匯出 .mak 檔案,否則無法從 Unix 來源組建伺服器命令列。

命令列組建

Makefile.win 是最上層的 Apache makefile。若要在 Windows 上編譯 Apache,只需使用下列任一命令即可組建 releasedebug 版本

nmake /f Makefile.win _apacher

nmake /f Makefile.win _apached

任一命令都可編譯 Apache。後者將停用對產生檔案的最佳化,讓您更輕鬆地單獨執行程式碼,找出錯誤並追蹤問題。

您可以透過額外的 make(環境)變數 DBD_LIST 和 DBM_LIST 新增您的 apr-util dbd 和 dbm 提供者選項,請參閱上述 [可選項目] 資料庫函式庫中的註解。檢閱 Makefile.win 中的初始註解,了解在呼叫組建時可提供的其他選項。

Developer Studio Workspace IDE 組建

Apache 也可搭配 VC++ 的 Visual Studio 開發環境來編譯。為了簡化此程序,我們提供了一個 Visual Studio 工作區 Apache.dsw。此工作區顯示所有作業中 .dsp 專案的清單,這些專案是完成 Apache 二進制版本所必須的。其中包含專案之間的相依性,確保專案能夠在正確順序中建置完成。

開啟 Apache.dsw 工作區,並選擇 InstallBin(可依需要選擇 ReleaseDebug 建置)作為「Active Project」。InstallBin 會導致所有相關專案都建立,然後呼叫 Makefile.win 來移動編譯的可執行檔與 DLL。您可以透過變更 InstallBin 的「設定」、變更「一般」索引標籤、建立命令列條目,自訂 INSTDIR= 選擇。INSTDIR 的預設值為 /Apache2 目錄。如果您只需要測試編譯(不包含安裝),您可以改建置 BuildBin 專案。

.dsp 專案檔案以 Visual Studio 6.0 (98) 格式發行。Visual C++ 5.0 (97) 會識別這些檔案。Visual Studio 2002(.NET) 及後續版本使用者必須將 Apache.dsw 加上 .dsp 檔案轉換成 Apache.sln 加上 .msproj 檔案。如果原始的 .dsp 檔案有任何變更,務必再次轉換 .msproj 檔案!這真的很簡單,只要再次使用 VC++ 7.0 IDE 開啟 Apache.dsw,然後進行轉換即可。

.vcproj 檔案會在 .dsp 檔案轉換時出現一個錯誤。devenv.exe 會錯誤地分析含有空白的長引用 /D'efines 的 RC 旗標中的 /D 旗標。命令

perl srclib\apr\build\cvtdsp.pl -2005

會將 RC 旗標的 /D 旗標轉換成使用另一種可分析的語法;很不幸地,這個語法不受到 Visual Studio 97 或其輸出的 .mak 檔案支援。這些 /D 旗標用於將 mod_apachemodule.so 檔案的長描述傳遞給共用 .rc 資源版本識別碼建置。
使用 OpenSSL 1.1.0 及以上版本進行建置由於 OpenSSL 的建置結構在 1.1.0 版本中有所不同,因此您需要使用 APR 1.6 以上版本提供的 cvtdsp.pl 轉換受影響的 dsp 檔案。命令

perl srclib\apr\build\cvtdsp.pl -ossl11

Visual Studio 2002 (.NET) 及後續版本使用者還應該使用建置功能表、設定管理員對話方塊取消勾選 DebugRelease Solution 模組(absmod_deflatemod_ssl 元件)、以及所有從 apr_db* 開始的元件。這些模組會透過呼叫 nmake 或 IDE 直接搭配 BinBuild 目標來建置,如果 srclib 目錄(openssl 和/或 zlib)存在,且根據 DBD_LISTDBM_LIST 環境變數設定,這些模組就會有條件地建置完成。

匯出命令列 .mak 檔案

匯出的 .mak 檔案會造成更多麻煩,但 Visual C++ 5.0 的使用者要建置 mod_ssl、abs(搭配 SSL 支援的 ab)和/或 mod_deflate 時需要這些檔案。.mak 檔案也會支援更廣泛的 C++ 工具鏈發行,例如 Visual Studio Express。

您必須先建立所有專案,才能建立所有動態自動產生目標,如此一來才能正確解析相依性。在 Visual Studio 6.0 (98) IDE 中使用 BuildAll 目標進行整個專案的建立,然後使用專案功能表來匯出所有 makefile(勾選「with dependencies」。執行下列命令,將絕對路徑修正為相對路徑,以讓它們無處可建

perl srclib\apr\build\fixwin32mak.pl

您必須從 httpd 原始碼樹的頂層目錄中輸入此命令。目前目錄及下方的每個 .mak.dep 專案檔案都將修正,而且時間戳記會調整,以反映 .dsp

隨時檢閱產生的 .mak.dep 檔案是否有 Platform SDK 或其他本機特定檔案路徑。DevStudio\Common\MSDev98\bin\(VC6)目錄包含一個 sysincl.dat 檔案,其中列出所有例外。更新這個檔案(包含正斜線及反斜線路徑,例如 sys/time.hsys\time.h),以忽略這些較新的相依性。在已散發的 .mak 檔案中包含本機安裝路徑會導致建置完全失敗。

如果您回饋修正專案檔案的修正程式,我們必須以 Visual Studio 6.0 格式提交專案檔案。變更應盡量簡單,並包含所有 Visual Studio 環境都能辨識的極少量編譯和連結旗標。

安裝

完成 Apache 編譯後,需要將它安裝到其伺服器根目錄中。預設值為同一個磁碟機的 \Apache2 目錄。

若要自動編譯並安裝所有檔案到所需的資料夾 dir,請使用下列其中一個 nmake 命令

nmake /f Makefile.win installr INSTDIR=dir
nmake /f Makefile.win installd INSTDIR=dir

傳遞至 INSTDIRdir 參數提供安裝目錄;若 Apache 將安裝到 \Apache22(目前磁碟機)中,則可以省略它。

從開發樹中建置 Apache 的警告

請注意,只有 .dsp 檔案會在發佈建置之間維持。不會重新產生 .mak 檔案,因為這極浪費審查員的時間。因此,除非您稍後自行從專案匯出所有 .mak 檔案,否則無法依賴上述 NMAKE 命令來建置經修改的 .dsp 專案檔案。如果您從 Microsoft Developer Studio 環境中進行建置,這將不必要。
top

使用 cmake 建置 httpd

此建置機制的首要文件位於原始碼散佈中的 README.cmake 檔案中。請參閱該檔案以取得詳細說明。

使用 cmake 建置 httpd 需要分別建置 APR 及 APR-util。請參閱其 README.cmake 檔案以取得指示說明。

基於 cmake 的建置的主要限制會從 APR-util 專案繼承下來,且由於它們對 httpd 的影響,如下列出

可用語言:  en  |  fr  |  ko 

top

評論

公告
此處並非問答區段。請將在此處發表的評論指向建議改善文件或伺服器的方向,如果已經實作或視為無效/離題,我們的管理員可能會將其移除。關於如何管理 Apache HTTP Server 的問題,應導向我們 IRC 頻道 #httpd,在 Libera.chat 上,或將其傳送給我們的郵寄清單