📄 win_compiling.html
字号:
从VC++ 5.0 或 6.0 集成开发环境编译所有项目,再使用Project菜单 - Export导出所有make文件。
为了创建全部自动产生的动态目标你必须首先编译项目,以便互相之间的依存关系可以被正确解析。运行下面命令修正路径使之能编译到任何位置:</p>
<div class="example"><p><code>
perl srclib\apr\build\fixwin32mak.pl
</code></p></div>
<p>你必须在<code>httpd</code>源码树的<em>顶层</em>目录输入这个命令。
当前目录及其子目录下所有的<code>.mak</code> 和 <code>.dep</code>项目文件都将被改正,并且时间戳被调节到与<code>.dsp</code>一致。</p>
<p>如果你贡献修正项目文件的补丁,我们必须以Visual Studio 6.0 格式来确认项目文件。
改动应该简单而且只带有最少的编译和连接标记以便能够被从VC++ 5.0 到 7.0 的所有环境识别。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="projectcomponents" id="projectcomponents">项目组件</a></h2>
<p><code>Apache.dsw</code>工作区文件和<code>makefile.win</code>
<code> nmake</code>脚本都是以下列顺序编译Apache服务器的<code>.dsp</code>项目文件:</p>
<ol>
<li><code>srclib\apr\apr.dsp</code></li>
<li><code>srclib\apr\libapr.dsp</code></li>
<li><code>srclib\apr-util\uri\gen_uri_delims.dsp</code></li>
<li><code>srclib\apr-util\xml\expat\lib\xml.dsp</code></li>
<li><code>srclib\apr-util\aprutil.dsp</code></li>
<li><code>srclib\apr-util\libaprutil.dsp</code></li>
<li><code>srclib\pcre\dftables.dsp</code></li>
<li><code>srclib\pcre\pcre.dsp</code></li>
<li><code>srclib\pcre\pcreposix.dsp</code></li>
<li><code>server\gen_test_char.dsp</code></li>
<li><code>libhttpd.dsp</code></li>
<li><code>Apache.dsp</code></li>
</ol>
<p>此外,<code>modules\</code>子目录树包含了大多数模块的项目文件。</p>
<p><code>support\</code>子目录包含了一些附加程序的项目文件,它们运行时不是Apache的一部分,
但是管理员要使用它们来测试Apache和维护密码与日志文件。
Windows平台特有的支持项目在<code>support\win32\</code>目录下。</p>
<ol>
<li><code>support\ab.dsp</code></li>
<li><code>support\htdigest.dsp</code></li>
<li><code>support\htpasswd.dsp</code></li>
<li><code>support\logresolve.dsp</code></li>
<li><code>support\rotatelogs.dsp</code></li>
<li><code>support\win32\ApacheMonitor.dsp</code></li>
<li><code>support\win32\wintty.dsp</code></li>
</ol>
<p>一旦编译了Apache,它需要被安装在服务器根目录,缺省是在同一个盘符下的<code>\Apache2</code>目录。</p>
<p>要自动编译和安装所有文件到指定的目录<em>dir</em> ,使用下列<code>nmake</code>命令之一:</p>
<div class="example"><pre>
nmake /f Makefile.win installr INSTDIR=<em>dir</em>
nmake /f Makefile.win installd INSTDIR=<em>dir</em>
</pre></div>
<p><code>INSTDIR</code>的<em>dir</em>参数给出了安装目录;如果要安装到<code>\Apache2</code>目录可以省略。</p>
<p>安装结果如下列:</p>
<ul>
<li><code><em>dir</em>\bin\Apache.exe</code> - Apache可执行文件</li>
<li><code><em>dir</em>\bin\ApacheMonitor.exe</code> - 服务监视器托盘图表工具</li>
<li><code><em>dir</em>\bin\htdigest.exe</code> - 摘要授权密码文件工具(Digest auth
password file utility)</li>
<li><code><em>dir</em>\bin\htdbm.exe</code> - SDBM授权数据库密码文件工具(SDBM auth
database password file utility)</li>
<li><code><em>dir</em>\bin\htpasswd.exe</code> - 基本授权密码文件工具(Basic auth
password file utility)</li>
<li><code><em>dir</em>\bin\logresolve.exe</code> - 日志文件dns名称查找工具</li>
<li><code><em>dir</em>\bin\rotatelogs.exe</code> - 日志文件遍历工具</li>
<li><code><em>dir</em>\bin\wintty.exe</code> - 控制台窗口工具</li>
<li><code><em>dir</em>\bin\libapr.dll</code> - Apache可移植运行时共享库</li>
<li><code><em>dir</em>\bin\libaprutil.dll</code> - Apache运行时共享库工具</li>
<li><code><em>dir</em>\bin\libhttpd.dll</code> - Apache核心库</li>
<li><code><em>dir</em>\modules\mod_*.so</code> - Apache可装载模块</li>
<li><code><em>dir</em>\conf</code> - 配置目录</li>
<li><code><em>dir</em>\logs</code> - 空日志目录</li>
<li><code><em>dir</em>\include</code> - C语言头文件</li>
<li><code><em>dir</em>\lib</code> - 连接库文件</li>
</ul>
<h3><a name="projectcomponents-warn" id="projectcomponents-warn">关于从开发树编译Apache的警告</a></h3>
<div class="note">在每次发布<code>发行</code>版本之间,只有<code>.dsp</code>文件被维护。
考虑到会对审阅者的时间造成巨大浪费,并不重新产生<code>.mak</code>文件。
因此,你不能依靠上述的<code>NMAKE</code>命令来编译修订过的<code>.dsp</code>项目文件,除非你自己从项目中导出全部<code>.mak</code>文件。如果你在Microsoft Developer Studio环境中编译这样做是不必要的。</div>
<div class="note">同时注意在导出make文件之前编译<code>BuildBin</code>目标项目是非常值得的(或者用命令行目标
<code>_apacher</code> 或 <code>_apached</code>)。
许多文件在编译过程中自动产生。只有一次完全编译才提供为正确的编译行为编译正确的依存关系树所需要的全部依赖文件。</div>
<p>为创建供发布的<code>.mak</code>文件,一定要检查<code>.mak</code>
(或<code>.dep</code>)中Platform SDK和其他头文件的依存性。
<code>DevStudio\SharedIDE\bin\</code>(VC5)或者<code>DevStudio\Common\MSDev98\bin\</code>(VC6)
目录包含了<code>sysincl.dat</code>文件,其中列出了所有的例外情况来告诉VC++创建依存关系时不扫描列表中的文件,
更新此文件以包含这些头文件
(同时包括正斜杠和反斜杠路径,比如<code>sys/time.h</code>和<code>sys\time.h</code>要同时列出)。
在发布的<code>.mak</code>文件中包含一个本地安装路径将使编译完全失败,所以不要忘了运行<code>srclib/apr/build/fixwin32mak.pl</code>来修正<code>.mak</code>文件中的绝对路径。</p>
</div>
</div>
<div id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="../translator_announcement.html#announcement">译者声明</a>。</p>
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -