<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 平台特定说明

在 Microsoft Windows 上编译 Apache

可用语言:  en  |  fr  |  ko 

在开始编译 Apache HTTP Server (httpd) 之前,有许多重要事项需要考虑。在开始之前,请参阅 在 Microsoft Windows 上使用 Apache HTTP Server

httpd 可以使用基于 cmake 的构建系统或由 httpd 开发人员维护的 Visual Studio 项目文件在 Windows 上构建。基于 cmake 的构建系统直接支持更多版本的 Visual Studio,但目前存在相当大的功能限制。

Support Apache!

另请参阅

top

使用包含的 Visual Studio 项目文件构建 httpd

要求

编译 Apache 需要以下环境正确安装

从 Unix 源代码构建

Apache HTTP Server 项目的策略是只发布 Unix 源代码。为下载提供的 Windows 源代码包是由志愿者提供的,可能并非每个版本都提供。您仍然可以使用几个额外的步骤从 Unix 源代码包在 Windows 上构建服务器。

  1. 下载并解压缩最新版本的 Unix 源代码包。
  2. 下载并解压缩最新版本的 APR、AR-Util 和 APR-Iconv 的 Unix 源代码包,将这些源代码放在 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 工作区 IDE 构建

Apache 也可以使用 VC++ 的 Visual Studio 开发环境进行编译。为了简化此过程,提供了一个 Visual Studio 工作区,Apache.dsw。此工作区公开了完整的 Apache 二进制发行版所需的全部工作 .dsp 项目列表。它包括项目之间的依赖关系,以确保它们按适当的顺序构建。

打开 Apache.dsw 工作区,并选择 InstallBinReleaseDebug 构建,根据需要)作为活动项目。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

将转换 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 解决方案模块 absmod_deflatemod_ssl 组件,以及所有以 apr_db* 开头的组件。这些模块是通过调用 nmake 或 IDE 直接使用 BinBuild 目标构建的,该目标在 srclib 目录 openssl 和/或 zlib 存在的情况下,以及根据 DBD_LISTDBM_LIST 环境变量的设置,有条件地构建这些模块。

导出命令行 .mak 文件

导出的 .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.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 文件在 release 构建之间维护。.mak 文件不会重新生成,因为这会浪费大量审阅者的时间。因此,您不能依赖上面的 NMAKE 命令来构建修改后的 .dsp 项目文件,除非您随后自己从项目中导出所有 .mak 文件。如果您从 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 上)或发送到我们的 邮件列表