Apache > HTTP Server > 文档 > 版本2.2 > 针对特定平台的说明
   致谢 | 本篇译者:金步国(其他作品) | 本页最后更新:2006年10月20日[查看最新版本]

在Microsoft Windows上编译Apache

在你开始编译Apache之前有许多重要问题需要注意。开始之前请先看看在Microsoft Windows上使用Apache

系统要求

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

命令行编译

首先,将Apache源码包解压到合适的目录。打开一个命令提示符窗口并用cd切换到那个目录。

主要的Apache make文件命令都包含在文件Makefile.win中。要在Windows NT上编译Apache ,只需要简单地使用下列命令之一就可以编译releasedebug版本,分别是:

nmake /f Makefile.win _apacher

nmake /f Makefile.win _apached
    

两条命令都可以编译Apache 。后者会在编译结果文件中包含调试信息,使发现bugs和跟踪问题更容易。

Developer Studio集成开发环境的工作区编译

Apache也能够用VC++的Visual Studio集成开发环境编译。为了简化过程,提供了一个Visual Studio工作区文件:Apache.dsw 。 它阐述了完整的Apache二进制发行版需要的全部.dsp项目列表。 它包含了项目之间的依存关系来保证编译按合适的顺序进行。

打开 Apache.dsw 工作区文件,选择 InstallBin (根据需要选择编译Release 或者Debug 版本) 为活动项目。InstallBin会引发编译相关的项目并调用 Makefile.win 移动编译后的可执行文件和动态链接库。你可以改变InstallBin项目的设置来定制 INSTDIR= 选项,修改设置中General页里面的Build Command line条目。INSTDIR的缺省值是 /Apache2目录。如果你只是想要测试编译(不安装),就用 BuildBin项目代替。

.dsp项目文件使用Visual C++ 6.0格式发行。Visual C++ 5.0 (97)也能识别这种格式。而Visual C++ 7.0 (.net)必须把Apache.dsw.dsp 文件转换成Apache.sln.msproj文件, 如果有任何一个.dsp源文件改变了,必须重新转换相应的.msproj文件! 这很容易,只需要在VC++ 7.0 集成开发环境中重新打开 Apache.dsw文件。

Visual C++ 7.0 (.net)的用户还应该使用Build 菜单下的Configuration Manager对话框来不选中模块abs ,mod_sslmod_deflate , 对编译DebugRelease版本都是。 仅当srclib目录下至少存在openssl或者zlib子目录二者之一, 才能调用nmake或者明白地使用BinBuild目标直接从集成开发环境来编译这几个模块。

导出的那些.mak文件造成很大的争议,但对于 Visual C++ 5.0 的用户它们是编译mod_ssl 、abs(带SSL支持的ab)和mod_deflate是必需的。 VC++ 7.0 (.net)的用户也能从中受益,用nmake编译比用 binenv要快。 从VC++ 5.0 或 6.0 集成开发环境编译所有项目,再使用Project菜单 - Export导出所有make文件。 为了创建全部自动产生的动态目标你必须首先编译项目,以便互相之间的依存关系可以被正确解析。运行下面命令修正路径使之能编译到任何位置:

perl srclib\apr\build\fixwin32mak.pl

你必须在httpd源码树的顶层目录输入这个命令。 当前目录及其子目录下所有的.mak.dep项目文件都将被改正,并且时间戳被调节到与.dsp一致。

如果你贡献修正项目文件的补丁,我们必须以Visual Studio 6.0 格式来确认项目文件。 改动应该简单而且只带有最少的编译和连接标记以便能够被从VC++ 5.0 到 7.0 的所有环境识别。

项目组件

Apache.dsw工作区文件和makefile.win nmake脚本都是以下列顺序编译Apache服务器的.dsp项目文件:

  1. srclib\apr\apr.dsp
  2. srclib\apr\libapr.dsp
  3. srclib\apr-util\uri\gen_uri_delims.dsp
  4. srclib\apr-util\xml\expat\lib\xml.dsp
  5. srclib\apr-util\aprutil.dsp
  6. srclib\apr-util\libaprutil.dsp
  7. srclib\pcre\dftables.dsp
  8. srclib\pcre\pcre.dsp
  9. srclib\pcre\pcreposix.dsp
  10. server\gen_test_char.dsp
  11. libhttpd.dsp
  12. Apache.dsp

此外,modules\子目录树包含了大多数模块的项目文件。

support\子目录包含了一些附加程序的项目文件,它们运行时不是Apache的一部分, 但是管理员要使用它们来测试Apache和维护密码与日志文件。 Windows平台特有的支持项目在support\win32\目录下。

  1. support\ab.dsp
  2. support\htdigest.dsp
  3. support\htpasswd.dsp
  4. support\logresolve.dsp
  5. support\rotatelogs.dsp
  6. support\win32\ApacheMonitor.dsp
  7. support\win32\wintty.dsp

一旦编译了Apache,它需要被安装在服务器根目录,缺省是在同一个盘符下的\Apache2目录。

要自动编译和安装所有文件到指定的目录dir ,使用下列nmake命令之一:

nmake /f Makefile.win installr INSTDIR=dir

nmake /f Makefile.win installd INSTDIR=dir
    

INSTDIRdir参数给出了安装目录;如果要安装到\Apache2目录可以省略。

安装结果如下列:

关于从开发树编译Apache的警告

在每次发布发行版本之间,只有.dsp文件被维护。 考虑到会对审阅者的时间造成巨大浪费,并不重新产生.mak文件。 因此,你不能依靠上述的NMAKE命令来编译修订过的.dsp项目文件,除非你自己从项目中导出全部.mak文件。如果你在Microsoft Developer Studio环境中编译这样做是不必要的。
同时注意在导出make文件之前编译BuildBin目标项目是非常值得的(或者用命令行目标 _apacher_apached)。 许多文件在编译过程中自动产生。只有一次完全编译才提供为正确的编译行为编译正确的依存关系树所需要的全部依赖文件。

为创建供发布的.mak文件,一定要检查.mak (或.dep)中Platform SDK和其他头文件的依存性。 DevStudio\SharedIDE\bin\(VC5)或者DevStudio\Common\MSDev98\bin\(VC6) 目录包含了sysincl.dat文件,其中列出了所有的例外情况来告诉VC++创建依存关系时不扫描列表中的文件, 更新此文件以包含这些头文件 (同时包括正斜杠和反斜杠路径,比如sys/time.hsys\time.h要同时列出)。 在发布的.mak文件中包含一个本地安装路径将使编译完全失败,所以不要忘了运行srclib/apr/build/fixwin32mak.pl来修正.mak文件中的绝对路径。