1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Compiling Apache for Microsoft Windows - Apache HTTP Server</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
12 <script src="../style/scripts/prettify.js" type="text/javascript">
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
18 <p class="apache">Apache HTTP Server Version 2.5</p>
19 <img alt="" src="../images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
22 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Platform Specific Notes</a></div><div id="page-content"><div id="preamble"><h1>Compiling Apache for Microsoft Windows</h1>
24 <p><span>Available Languages: </span><a href="../en/platform/win_compiling.html" title="English"> en </a> |
25 <a href="../ko/platform/win_compiling.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
29 <p>There are many important points to consider before you begin compiling
30 Apache. See <a href="windows.html">Using Apache with Microsoft
31 Windows</a> before you begin.</p>
34 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#requirements">Requirements</a></li>
35 <li><img alt="" src="../images/down.gif" /> <a href="#commandbuild">Command-Line Build</a></li>
36 <li><img alt="" src="../images/down.gif" /> <a href="#workspacebuild">Developer Studio Workspace IDE Build</a></li>
37 <li><img alt="" src="../images/down.gif" /> <a href="#exportingmakfiles">Exporting command-line .mak files</a></li>
38 <li><img alt="" src="../images/down.gif" /> <a href="#installation">Installation</a></li>
39 <li><img alt="" src="../images/down.gif" /> <a href="#projectcomponents-warn">Warning about building Apache from the development tree</a></li>
40 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
41 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
43 <h2><a name="requirements" id="requirements">Requirements</a></h2>
47 <p>Compiling Apache requires the following environment to be
48 properly installed:</p>
54 <p>Make sure you have at least 200 MB of free disk space
55 available. After installation Apache requires approximately
56 80 MB of disk space, plus space for log and cache files,
57 which can grow rapidly. The actual disk space requirements
58 will vary considerably based on your chosen configuration and
59 any third-party modules or libraries, especially when OpenSSL
60 is also built. Because many files are text and very easily
61 compressed, NTFS filesystem compression cuts these requirements
66 <p>Appropriate Patches</p>
68 <p>The httpd binary is built with the help of several patches to
69 third party packages, which ensure the released code is buildable
70 and debuggable. These patches are available and distributed from <a href="http://www.apache.org/dist/httpd/binaries/win32/patches_applied/">http://www.apache.org/dist/httpd/binaries/win32/patches_applied/</a>
71 and are recommended to be applied to obtain identical results as the
72 "official" ASF distributed binaries.</p>
76 <p>Microsoft Visual C++ 6.0 (Visual Studio 97) or later.</p>
78 <p>Apache can be built using the command line tools, or from
79 within the Visual Studio IDE Workbench. The command line
80 build requires the environment to reflect the <code>PATH</code>,
81 <code>INCLUDE</code>, <code>LIB</code> and other variables
82 that can be configured with the <code>vcvars32.bat</code> script.</p>
84 <div class="note">You may want the Visual Studio Processor Pack for your older
85 version of Visual Studio, or a full (not Express) version of newer
86 Visual Studio editions, for the ml.exe assembler. This will allow
87 you to build OpenSSL, if desired, using the more efficient assembly
88 code implementation.</div>
90 <div class="note">Only the Microsoft compiler tool chain is actively supported by
91 the active httpd contributors. Although the project regularly accepts
92 patches to ensure MinGW and other alternative builds work and improve
93 upon them, they are not actively maintained and are often broken in
94 the course of normal development.</div>
98 <p>Updated Microsoft Windows Platform SDK, February 2003 or later.</p>
100 <p>An appropriate Windows Platform SDK is included by default in the
101 full (not express/lite) versions of Visual C++ 7.1 (Visual Studio 2002)
102 and later, these users can ignore these steps unless explicitly choosing
103 a newer or different version of the Platform SDK.</p>
105 <p>To use Visual C++ 6.0 or 7.0 (Studio 2000 .NET), the Platform SDK
106 environment must be prepared using the <code>setenv.bat</code>
107 script (installed by the Platform SDK) before starting the command
108 line build or launching the msdev/devenv GUI environment. Installing
109 the Platform SDK for Visual Studio Express versions (2003 and later)
110 should adjust the default environment appropriately.</p>
112 <div class="example"><p><code>
113 "c:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32"<br />
114 "c:\Program Files\Platform SDK\setenv.bat"
121 <p>Several steps recommended here require a perl interpreter during
122 the build preparation process, but it is otherwise not required.</p>
124 <p>To install Apache within the build system, several files are
125 modified using the <code>awk.exe</code> utility. awk was chosen since
126 it is a very small download (compared with Perl or WSH/VB) and
127 accomplishes the task of modifying configuration files upon
128 installation. Brian Kernighan's
129 <a href="http://www.cs.princeton.edu/~bwk/btl.mirror/">http://www.cs.princeton.edu/~bwk/btl.mirror/</a>
130 site has a compiled native Win32 binary,
131 <a href="http://www.cs.princeton.edu/~bwk/btl.mirror/awk95.exe">http://www.cs.princeton.edu/~bwk/btl.mirror/awk95.exe</a> which
132 you must save with the name <code>awk.exe</code> (rather than
133 <code>awk95.exe</code>).</p>
135 <div class="note">If awk.exe is not found, Makefile.win's install target
136 will not perform substitutions in the installed .conf files.
137 You must manually modify the installed .conf files to allow
138 the server to start. Search and replace all "@token@" tags
139 as appropriate.</div>
141 <div class="note">The Visual Studio IDE will only find <code>awk.exe</code>
142 from the PATH, or executable path specified in the menu option
143 Tools -> Options -> (Projects ->) Directories. Ensure
144 awk.exe is in your system path.</div>
146 <div class="note">Also note that if you are using Cygwin tools
147 (<a href="http://www.cygwin.com/">http://www.cygwin.com/</a>)
148 the awk utility is named <code>gawk.exe</code> and that the file
149 <code>awk.exe</code> is really a symlink to the <code>gawk.exe</code>
150 file. The Windows command shell does not recognize symlinks, and
151 because of this building InstallBin will fail. A workaround is
152 to delete <code>awk.exe</code> from the cygwin installation and
153 copy <code>gawk.exe</code> to <code>awk.exe</code>. Also note the
154 cygwin/mingw ports of gawk 3.0.x were buggy, please upgrade to 3.1.x
155 before attempting to use any gawk port.</div>
159 <p>[Optional] zlib library (for <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>)</p>
161 <p>Zlib must be installed into a <code>srclib</code> subdirectory named
162 <code>zlib</code>. This must be built in-place. Zlib can be obtained
163 from <a href="http://www.zlib.net/">http://www.zlib.net/</a> -- the
164 <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> is confirmed to work correctly with
167 <div class="example"><p><code>
168 nmake -f win32\Makefile.msc<br />
169 nmake -f win32\Makefile.msc test
174 <p>[Optional] OpenSSL libraries (for <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>
175 and <code>ab.exe</code> with ssl support)</p>
177 <div class="note">The OpenSSL library is cryptographic software. The country
178 in which you currently reside may have restrictions on the import,
179 possession, use, and/or re-export to another country, of encryption
180 software. BEFORE using any encryption software, please check your
181 country's laws, regulations and policies concerning the import,
182 possession, or use, and re-export of encryption software, to see
183 if this is permitted. See
184 <a href="http://www.wassenaar.org/">http://www.wassenaar.org/</a>
185 for more information.</div>
187 <p>Configuring and building OpenSSL requires perl to be installed.</p>
189 <p>OpenSSL must be installed into a <code>srclib</code> subdirectory
190 named <code>openssl</code>, obtained from
191 <a href="http://www.openssl.org/source/">http://www.openssl.org/source/</a>, in order to compile
192 <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> or the <code>abs.exe</code> project, which
193 is ab.c with SSL support enabled. To prepare OpenSSL to be linked
194 to Apache mod_ssl or abs.exe, and disable patent encumbered features
195 in OpenSSL, you might use the following build commands:</p>
197 <div class="example"><p><code>
198 perl Configure no-rc5 no-idea enable-mdc2 enable-zlib VC-WIN32
199 -Ipath/to/srclib/zlib -Lpath/to/srclib/zlib<br />
201 nmake -f ms\ntdll.mak
204 <div class="note">It is not advisable to use zlib-dynamic, as that transfers
205 the cost of deflating SSL streams to the first request which must
206 load the zlib dll. Note the suggested patch enables the -L flag to
207 work with windows builds, corrects the name of zdll.lib and ensures
208 .pdb files are generated for troubleshooting. If the assembler is
209 not installed, you would add no-asm above and use ms\do_ms.bat
210 instead of the ms\do_masm.bat script.</div>
214 <p>[Optional] Database libraries (for <code class="module"><a href="../mod/mod_dbd.html">mod_dbd</a></code>
215 and <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code>)</p>
217 <p>The apr-util library exposes dbm (keyed database) and dbd (query
218 oriented database) client functionality to the httpd server and its
219 modules, such as authentication and authorization. The sdbm dbm and
220 odbc dbd providers are compiled unconditionally.</p>
222 <p>The dbd support includes the Oracle instantclient package, MySQL,
223 PostgreSQL and sqlite. To build these all, for example, set up the
224 LIB to include the library path, INCLUDE to include the headers path,
225 and PATH to include the dll bin path of all four SDK's, and set the
226 DBD_LIST environment variable to inform the build which client driver
227 SDKs are installed correctly, e.g.;</p>
229 <div class="example"><p><code>
230 set DBD_LIST=sqlite3 pgsql oracle mysql
233 <p>Similarly, the dbm support can be extended with DBM_LIST to
234 build a Berkeley DB provider (db) and/or gdbm provider, by similarly
235 configuring LIB, INCLUDE and PATH first to ensure the client library
236 libs and headers are available.</p>
238 <div class="example"><p><code>
242 <div class="note">Depending on the choice of database distributions, it may be
243 necessary to change the actual link target name (e.g. gdbm.lib vs.
244 libgdb.lib) that are listed in the corresponding .dsp/.mak files
245 within the directories srclib\apr-util\dbd or ...\dbm.</div>
247 <p>See the README-win32.txt file for more hints on obtaining the
248 various database driver SDKs.</p>
252 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
253 <div class="section">
254 <h2><a name="commandbuild" id="commandbuild">Command-Line Build</a></h2>
258 <p><code>Makefile.win</code> is the top level Apache makefile.
259 To compile Apache on Windows, simply use one of the following commands
260 to build the <code>release</code> or <code>debug</code> flavor:</p>
262 <div class="example"><p><code>
263 nmake /f Makefile.win _apacher<br /><br />
264 nmake /f Makefile.win _apached
267 <p>Either command will compile Apache. The latter will disable
268 optimization of the resulting files, making it easier to single
269 step the code to find bugs and track down problems.</p>
271 <p>You can add your apr-util dbd and dbm provider choices with the
272 additional make (environment) variables DBD_LIST and DBM_LIST,
273 see the comments about [Optional] Database libraries, above.
274 Review the initial comments in Makefile.win for additional options
275 that can be provided when invoking the build.</p>
277 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
278 <div class="section">
279 <h2><a name="workspacebuild" id="workspacebuild">Developer Studio Workspace IDE Build</a></h2>
283 <p>Apache can also be compiled using VC++'s Visual Studio
284 development environment. To simplify this process, a
285 Visual Studio workspace, <code>Apache.dsw</code>, is provided.
286 This workspace exposes the entire list of working <code>.dsp</code>
287 projects that are required for the complete Apache binary release.
288 It includes dependencies between the projects to assure that they
289 are built in the appropriate order.</p>
291 <p>Open the <code>Apache.dsw</code> workspace, and select
292 <code>InstallBin</code> (<code>Release</code> or <code>Debug</code> build,
293 as desired) as the Active Project. <code>InstallBin</code> causes all
294 related project to be built, and then invokes <code>Makefile.win</code> to
295 move the compiled executables and dlls. You may personalize the
296 <code>INSTDIR=</code> choice by changing <code>InstallBin</code>'s Settings,
297 General tab, Build command line entry. <code>INSTDIR</code> defaults to the
298 <code>/Apache2</code> directory. If you only want a test compile (without
299 installing) you may build the <code>BuildBin</code> project instead.</p>
301 <p>The <code>.dsp</code> project files are distributed in Visual Studio 6.0
302 (98) format. Visual C++ 5.0 (97) will recognize them. Visual Studio
303 2002 (.NET) and later users must convert <code>Apache.dsw</code> plus
304 the <code>.dsp</code> files into an <code>Apache.sln</code> plus
305 <code>.msproj</code> files. Be sure you reconvert the <code>.msproj</code>
306 file again if its source <code>.dsp</code> file changes! This is really
307 trivial, just open <code>Apache.dsw</code> in the VC++ 7.0 IDE once again
310 <div class="note">There is a flaw in the .vcproj conversion of .dsp files. devenv.exe
311 will mis-parse the /D flag for RC flags containing long quoted /D'efines
312 which contain spaces. The command:
313 <div class="example"><p><code>
314 perl srclib\apr\build\cvtdsp.pl -2005
316 will convert the /D flags for RC flags to use an alternate, parseable
317 syntax; unfortunately this syntax isn't supported by Visual Studio 97
318 or its exported .mak files. These /D flags are used to pass the long
319 description of the mod_apachemodule.so files to the shared .rc resource
320 version-identifier build.</div>
322 <p>Visual Studio 2002 (.NET) and later users should also use the Build
323 menu, Configuration Manager dialog to uncheck both the <code>Debug</code>
324 and <code>Release</code> Solution modules <code>abs</code>,
325 <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code> and <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> components, as
326 well as every component starting with <code>apr_db*</code>. These modules
327 are built by invoking <code>nmake</code>, or the IDE directly with the
328 <code>BinBuild</code> target, which builds those modules conditionally
329 if the <code>srclib</code> directories <code>openssl</code> and/or
330 <code>zlib</code> exist, and based on the setting of <code>DBD_LIST</code>
331 and <code>DBM_LIST</code> environment variables.</p>
333 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
334 <div class="section">
335 <h2><a name="exportingmakfiles" id="exportingmakfiles">Exporting command-line .mak files</a></h2>
339 <p>Exported <code>.mak</code> files pose a greater hassle, but they are
340 required for Visual C++ 5.0 users to build <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>,
341 abs (<code class="program"><a href="../programs/ab.html">ab</a></code> with SSL support) and/or
342 <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>. The .mak files also support a broader
343 range of C++ tool chain distributions, such as Visual Studio Express.</p>
345 <p>You must first build all projects in order to create all dynamic
346 auto-generated targets, so that dependencies can be parsed correctly.
347 Build the entire project from within the Visual Studio 6.0 (98) IDE,
348 using the <code>BuildAll</code> target, then use the Project Menu Export
349 for all makefiles (checking on "with dependencies".) Run the following
350 command to correct absolute paths into relative paths so they will build
353 <div class="example"><p><code>
354 perl srclib\apr\build\fixwin32mak.pl
357 <p>You must type this command from the <em>top level</em>
358 directory of the httpd source tree. Every
359 <code>.mak</code> and <code>.dep</code> project file within
360 the current directory and below will be corrected, and the
361 timestamps adjusted to reflect the <code>.dsp</code>.</p>
363 <p>Always review the generated <code>.mak</code> and <code>.dep</code>
364 files for Platform SDK or other local, machine specific file paths.
365 The <code>DevStudio\Common\MSDev98\bin\</code> (VC6) directory contains
366 a <code>sysincl.dat</code> file, which lists all exceptions. Update
367 this file (including both forward and backslashed paths, such as both
368 <code>sys/time.h</code> and <code>sys\time.h</code>) to ignore such
369 newer dependencies. Including local-install paths in a distributed
370 <code>.mak</code> file will cause the build to fail completely.</p>
372 <p>If you contribute back a patch that revises project files, we
373 must commit project files in Visual Studio 6.0 format. Changes
374 should be simple, with minimal compilation and linkage flags that
375 can be recognized by all Visual Studio environments.</p>
377 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
378 <div class="section">
379 <h2><a name="installation" id="installation">Installation</a></h2>
383 <p>Once Apache has been compiled, it needs to be installed in
384 its server root directory. The default is the
385 <code>\Apache2</code> directory, of the same drive.</p>
387 <p>To build and install all the files into the desired folder
388 <em>dir</em> automatically, use one of the following
389 <code>nmake</code> commands:</p>
391 <div class="example"><p><code>
392 nmake /f Makefile.win installr INSTDIR=<em>dir</em><br />
393 nmake /f Makefile.win installd INSTDIR=<em>dir</em>
396 <p>The <em>dir</em> argument to <code>INSTDIR</code> provides
397 the installation directory; it can be omitted if Apache is
398 to be installed into <code>\Apache22</code> (of the current
401 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
402 <div class="section">
403 <h2><a name="projectcomponents-warn" id="projectcomponents-warn">Warning about building Apache from the development tree</a></h2>
407 <div class="note">Note only the <code>.dsp</code> files are maintained between <code>release</code>
408 builds. The <code>.mak</code> files are NOT regenerated, due to the tremendous
409 waste of reviewer's time. Therefore, you cannot rely on the <code>NMAKE</code>
410 commands above to build revised <code>.dsp</code> project files unless you
411 then export all <code>.mak</code> files yourself from the project. This is
412 unnecessary if you build from within the Microsoft
413 Developer Studio environment.</div>
416 <div class="bottomlang">
417 <p><span>Available Languages: </span><a href="../en/platform/win_compiling.html" title="English"> en </a> |
418 <a href="../ko/platform/win_compiling.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
419 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>This section is experimental!</strong><br />Comments placed here should not be expected
420 to last beyond the testing phase of this system, nor do we in any way guarantee that we'll read them.</div>
421 <script type="text/javascript"><!--//--><![CDATA[//><!--
422 var disqus_shortname = 'httpd';
423 var disqus_identifier = 'http://httpd.apache.org/docs/2.4/platform/win_compiling.html.en';
426 if (w.location.hostname.toLowerCase() == "httpd.apache.org" && disabled !== true) {
427 d.write('<div id="disqus_thread"><\/div>');
428 var s = d.createElement('script');
429 s.type = 'text/javascript';
431 s.src = 'http' + '://' + disqus_shortname + '.disqus.com/embed.js';
432 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
435 d.write('<div id="disqus_thread">Comments are disabled for this page at the moment.<\/div>');
437 })(window, document);
438 //--><!]]></script></div><div id="footer">
439 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
440 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
441 if (typeof(prettyPrint) !== 'undefined') {