Apache HTTP Server 版本 2.4
在开始编译 Apache HTTP Server (httpd) 之前,有许多重要事项需要考虑。在开始之前,请参阅 在 Microsoft Windows 上使用 Apache HTTP Server。
httpd 可以使用基于 cmake 的构建系统或由 httpd 开发人员维护的 Visual Studio 项目文件在 Windows 上构建。基于 cmake 的构建系统直接支持更多版本的 Visual Studio,但目前存在相当大的功能限制。
编译 Apache 需要以下环境正确安装
磁盘空间
确保您至少有 200 MB 的可用磁盘空间。安装后,Apache 需要大约 80 MB 的磁盘空间,再加上日志和缓存文件的空间,这些空间可能会迅速增长。实际的磁盘空间需求将根据您选择的配置以及任何第三方模块或库而有很大差异,尤其是在构建 OpenSSL 时。由于许多文件是文本文件并且很容易压缩,因此 NTFS 文件系统压缩可以将这些需求减少一半。
合适的补丁
httpd 二进制文件是在第三方软件包的几个补丁的帮助下构建的,这些补丁确保发布的代码可构建和可调试。这些补丁可从 http://www.apache.org/dist/httpd/binaries/win32/patches_applied/ 获取和分发,建议将它们应用以获得与 ASF 分发的“官方”二进制文件相同的结果。
Microsoft Visual C++ 6.0 (Visual Studio 97) 或更高版本。
Apache 可以使用命令行工具或从 Visual Studio IDE 工作台内部构建。命令行构建需要环境反映 PATH
、INCLUDE
、LIB
和可以使用 vcvars32.bat
脚本配置的其他变量。
更新的 Microsoft Windows 平台 SDK,2003 年 2 月或更高版本。
Visual C++ 7.1 (Visual Studio 2002) 及更高版本的完整版(非 express/lite 版)默认情况下包含适当的 Windows 平台 SDK,这些用户可以忽略这些步骤,除非明确选择更新或不同的版本平台 SDK。
要使用 Visual C++ 6.0 或 7.0 (Studio 2000 .NET),必须在启动命令行构建或启动 msdev/devenv GUI 环境之前,使用 setenv.bat
脚本(由平台 SDK 安装)准备平台 SDK 环境。为 Visual Studio Express 版本(2003 及更高版本)安装平台 SDK 应该适当地调整默认环境。
"c:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32"
"c:\Program Files\Platform SDK\setenv.bat"
Perl 和 awk
此处推荐的几个步骤在构建准备过程中需要 perl 解释器,但除此之外不需要。
要在构建系统中安装 Apache,需要使用 awk.exe
实用程序修改几个文件。选择 awk 是因为它是一个非常小的下载文件(与 Perl 或 WSH/VB 相比),并且在安装时可以完成修改配置文件的任务。Brian Kernighan 的 http://www.cs.princeton.edu/~bwk/btl.mirror/ 网站有一个编译的本机 Win32 二进制文件,http://www.cs.princeton.edu/~bwk/btl.mirror/awk95.exe,您必须将其保存为 awk.exe
(而不是 awk95.exe
)。
awk.exe
。确保 awk.exe 位于您的系统路径中。gawk.exe
,并且文件 awk.exe
实际上是一个指向 gawk.exe
文件的符号链接。Windows 命令 shell 无法识别符号链接,因此构建 InstallBin 会失败。解决方法是删除 cygwin 安装中的 awk.exe
并将 gawk.exe
复制到 awk.exe
。另请注意,gawk 3.0.x 的 cygwin/mingw 端口存在错误,请在尝试使用任何 gawk 端口之前升级到 3.1.x。[可选] zlib 库(用于 mod_deflate
)
Zlib 必须安装到名为 zlib
的 srclib
子目录中。这必须在本地构建。Zlib 可以从 http://www.zlib.net/ 获取 - mod_deflate
已确认与版本 1.2.3 正确配合使用。
nmake -f win32\Makefile.msc
nmake -f win32\Makefile.msc test
[可选] OpenSSL 库(用于 mod_ssl
和支持 ssl 的 ab.exe
)
配置和构建 OpenSSL 需要安装 perl。
OpenSSL 必须安装到名为 openssl
的 srclib
子目录中,从 http://www.openssl.org/source/ 获取,以便编译 mod_ssl
或 abs.exe
项目,该项目是启用了 SSL 支持的 ab.c。为了准备将 OpenSSL 链接到 Apache mod_ssl 或 abs.exe,并在 OpenSSL 中禁用受专利保护的功能,您可以使用以下构建命令
perl Configure no-rc5 no-idea enable-mdc2 enable-zlib VC-WIN32 -Ipath/to/srclib/zlib -Lpath/to/srclib/zlib
ms\do_masm.bat
nmake -f ms\ntdll.mak
[可选] 数据库库(用于 mod_dbd
和 mod_authn_dbm
)
apr-util 库将 dbm(键值数据库)和 dbd(面向查询的数据库)客户端功能公开给 httpd 服务器及其模块,例如身份验证和授权。sdbm dbm 和 odbc dbd 提供程序是无条件编译的。
dbd 支持包括 Oracle instantclient 包、MySQL、PostgreSQL 和 sqlite。例如,要构建所有这些,请设置 LIB 以包含库路径,设置 INCLUDE 以包含头文件路径,设置 PATH 以包含所有四个 SDK 的 dll bin 路径,并设置 DBD_LIST 环境变量以告知构建哪些客户端驱动程序 SDK 已正确安装,例如;
set DBD_LIST=sqlite3 pgsql oracle mysql
类似地,可以通过类似地配置 LIB、INCLUDE 和 PATH 首先确保客户端库 libs 和头文件可用,然后使用 DBM_LIST 扩展 dbm 支持以构建 Berkeley DB 提供程序 (db) 和/或 gdbm 提供程序。
set DBM_LIST=db gdbm
有关获取各种数据库驱动程序 SDK 的更多提示,请参阅 README-win32.txt 文件。
Apache HTTP Server 项目的策略是只发布 Unix 源代码。为下载提供的 Windows 源代码包是由志愿者提供的,可能并非每个版本都提供。您仍然可以使用几个额外的步骤从 Unix 源代码包在 Windows 上构建服务器。
perl srclib\apr\build\lineends.pl
您现在可以使用 IDE 使用 Visual Studio 开发环境构建服务器。除非您导出 .mak 文件(如下所述),否则无法从 Unix 源代码进行服务器的命令行构建。
Makefile.win
是顶层 Apache makefile。要在 Windows 上编译 Apache,只需使用以下命令之一来构建 release
或 debug
版本
nmake /f Makefile.win _apacher
nmake /f Makefile.win _apached
这两个命令都将编译 Apache。后者将禁用对生成文件的优化,从而更容易单步执行代码以查找错误并跟踪问题。
您可以使用额外的 make(环境)变量 DBD_LIST 和 DBM_LIST 添加您的 apr-util dbd 和 dbm 提供程序选择,请参阅上面关于 [可选] 数据库库的注释。查看 Makefile.win 中的初始注释,了解在调用构建时可以提供的其他选项。
Apache 也可以使用 VC++ 的 Visual Studio 开发环境进行编译。为了简化此过程,提供了一个 Visual Studio 工作区,Apache.dsw
。此工作区公开了完整的 Apache 二进制发行版所需的全部工作 .dsp
项目列表。它包括项目之间的依赖关系,以确保它们按适当的顺序构建。
打开 Apache.dsw
工作区,并选择 InstallBin
(Release
或 Debug
构建,根据需要)作为活动项目。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 定义的 RC 标志的 /D 标志。命令perl srclib\apr\build\cvtdsp.pl -2005
perl srclib\apr\build\cvtdsp.pl -ossl11
Visual Studio 2002 (.NET) 及更高版本的用户还应使用“构建”菜单、“配置管理器”对话框取消选中 Debug
和 Release
解决方案模块 abs
、mod_deflate
和 mod_ssl
组件,以及所有以 apr_db*
开头的组件。这些模块是通过调用 nmake
或 IDE 直接使用 BinBuild
目标构建的,该目标在 srclib
目录 openssl
和/或 zlib
存在的情况下,以及根据 DBD_LIST
和 DBM_LIST
环境变量的设置,有条件地构建这些模块。
导出的 .mak
文件会带来更大的麻烦,但它们是 Visual C++ 5.0 用户构建 mod_ssl
、abs (ab
具有 SSL 支持) 和/或 mod_deflate
所必需的。.mak 文件还支持更广泛的 C++ 工具链分发,例如 Visual Studio Express。
您必须首先构建所有项目以创建所有动态自动生成的 target,以便可以正确解析依赖关系。使用 BuildAll
target 从 Visual Studio 6.0 (98) IDE 中构建整个项目,然后使用“项目”菜单“导出所有 makefile”(选中“带依赖关系”)。运行以下命令将绝对路径更正为相对路径,以便它们可以在任何地方构建
perl srclib\apr\build\fixwin32mak.pl
您必须从 httpd 源代码树的顶层目录键入此命令。当前目录及其以下的每个 .mak
和 .dep
项目文件都将被更正,并且时间戳将被调整以反映 .dsp
。
始终查看生成的 .mak
和 .dep
文件,以了解平台 SDK 或其他本地、特定于机器的文件路径。DevStudio\Common\MSDev98\bin\
(VC6)目录包含一个 sysincl.dat
文件,其中列出了所有例外情况。更新此文件(包括正斜杠和反斜杠路径,例如 sys/time.h
和 sys\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
INSTDIR
的dir 参数提供安装目录;如果 Apache 要安装到 \Apache22
(当前驱动器),则可以省略它。
.dsp
文件在 release
构建之间维护。.mak
文件不会重新生成,因为这会浪费大量审阅者的时间。因此,您不能依赖上面的 NMAKE
命令来构建修改后的 .dsp
项目文件,除非您随后自己从项目中导出所有 .mak
文件。如果您从 Microsoft Developer Studio 环境中构建,则无需执行此操作。此构建机制的主要文档位于源代码分发中的 README.cmake
文件中。有关详细说明,请参阅该文件。
使用 cmake 构建 httpd 需要分别构建 APR 和 APR-util。有关说明,请参阅它们的 README.cmake
文件。
基于 cmake 的构建的主要限制继承自 APR-util 项目,并列在下面,因为它们会影响 httpd
mod_charset_lite
和一些第三方模块可能无法使用。