Visit Mozilla.org

Windows Build Prerequisites

From MDC

目录

[编辑] 介绍

这篇文档是关于如何在 Windows 平台编译Mozilla的. Mozilla的编译系统要利用 UNIX 仿真器, cygwin, 来控制编译过程.

如果你想编译Mozilla的1.0分支以前的源码, 请参考 nmake build instructions.

[编辑] 硬件需求

Mozilla的build是需要时间的。你需要一个开发级别的系统:

  • Pentium III或者同等级别的处理器,1GHz或者更好,建议1.5GHz以上。
  • 512MB内存,建议1G
  • 1.5GBNTFS或者3GBFAT的硬盘空间,或者更多。
  • Windows NT类的操作系统(NT4.0, win2k, windows XP Professional and XP Home Edition)

[编辑] 软件需求

在开始编译Mozilla之前需要安装如下软件. 注意除了Visual C++外, 其他编译工具的安装路径不能包含空格, 加号, 引号, 已经 meta 字符.

[编辑] Microsoft Windows 下的GUN工具 (Cygwin)

cygwin 是 Windows 上的一个类似UNIX的环境. Mozilla 要利用到 cygwin 提供的开发工具集: gawk, make 和 zip. GCC 没有用到, 它不需要安装. 必须安装cygwin 1.1.6 或更高的版本. 注意不要在 Windows 上安装两个以上的cygwin, 多个cygwin并存会带来一些未知的错误.

请访问 http://www.cygwin.com/ 网站, 按照指令安装cygwin. 安装过程有一个 Wizard 指导, 除了缺省必须安装的 package 外, 你要自己选择安装那些程序 packages.

如果你只想用 cygwin 来编译Mozilla, 只需安装缺省 packets 和编译 Mozilla 用到的packages. 在写这篇文档的时候, 为了编译Mozilla, 你应该还需要选择 Devel, Interpreters, 和 Archive 分类下的: make (under Devel), perl and gawk (under Interpreters), and unzip and zip (under Archive).

如果你可能使用cygwin的UNIX类工具来做额外的开发,请安装editors,develpoers,develpoer工具和interpreters,和任何你任何你看着比较感兴趣的东西.并且确保你获得了所有的Mozilla需要的安装包,如unzip和zip!

这里是一个完整的编译Mozilla所需要的 packages 清单:

  • ash -- UNIX类命令行解释shell (Base category)
  • coreutils -- GNU核心应用 (includes fileutils, sh-utils, and textutils) (Base category)
  • diffutils -- 文件比较应用 (Base category)
  • findutils (Base category)
  • gawk -- 模式匹配语言 (Base and Interpretors categories)
  • grep -- 文本搜索工具 (Base category)
  • make -- 用于软件builds的从属分析器 (Devel category)
  • patchutils -- a small collection of programs that operate on patch files (Devel category)
  • perl -- 用来控制build部分的的描述语言 (Interpreters category)
  • sed -- 一个搜索替换语言 (Base category)
  • unzip -- zip文件解压 (Archive category)
  • zip -- zip文件产生 (Archive category)

如果你打算修改编译系统的 configure.in 文件, 你还需要安装 autoconf-2.13 (autoconf-stable) package.

在安装cygwin的时候, 推荐选中 "DOS" 类型换行.

你也可以使用 ActiveState perl 而不是安装 cygwin 中的perl 的 package.

[编辑] Netscape wintools

当使用 MSVC++ 来编译Mozilla, 你必须另外安装 glib 和 libidl 库.

如果编译 CVS trunk (Mozilla 1.9 或更高版本), 可以使用静态链接的库版本moztools-static.zip. 将该文件解压可获得一个名为 moztools 的文件夹, 将 MOZ_TOOLS 环境变量设置为这个文件夹路径.

如果计划编译 Firefox 1.5(Mozilla 1.8.0)或更早期的版本, 必须使用 Netscape 的 wintools.zip, 如果您使用的不是 Visual C++ 6, 可以从这里获得 VC++ 7 或 VC++ 7.1 预编译好的库.

解压这个wintools.zip文件到一个临时目录, 打开一个 Windows 命令行窗口, 设置 MOZ_TOOLS 环境变量为库的安装目录:

set MOZ_TOOLS=C:\moztools

注意 MOZ_TOOLS 目录不应该在 cygwin 的安装目录(或其子目录)下, 否则会编译出错.

运行 wintools 安装脚本, 这个批处理脚本会把文件安装到 %MOZ_TOOLS%/bin 目录.

cd buildtools\windows
install.bat

[编辑] cvs

Mozilla 使用 CVS 作为源代码控制系统. 如果你只下载了 Mozilla 的tar包, 你不必安装 WinCvs 客户端程序; 否则见下:

要把 Mozilla 源码拉到本地, 需要1.11以上的cvs. 推荐使用 cygwin 上的 CVS, 或者使用 WinCVS. 如果安装了 cygwin 的CVS, 你还需要安装一个编辑器, 比如说emacs.

[编辑] 编译 & 连接

对于 CVS trunk (Mozilla 1.9 或更高版本)而言, 标准编译器是 Microsoft Visual C++, version 8(包括 Microsoft Visual Studio 2005 或 Microsoft Visual C++ 8 Express). Visual C++ 7.1 也应该能工作. 但不建议使用 Visual C++ 7. VC6 不再被支持而且也无法成功编译.

对于 Mozilla 1.8 或早期版本而言(包括Firefox 2, Firefox 1.5 以及更早的版本), 标准编译器是 Microsoft Visual C++, version 6 加两个补丁: Visual C++ Service Pack 5Visual C++ Processor Pack. Service Pack 6 不需要, Mozilla不支持MSVC 5. Visual C++ 7.1 和 8 也能工作(译者:事实上 VC8 编译该 branch 很麻烦, 需要不少 patch)

编译工作在 Windows 命令行窗口下和 cygwin shell 下都能工作. 确认你安装VC的时候, 同时建立了 vcvars32.bat 脚本. 在 Windows 命令行窗口编译前需要运行该脚本.

关于如何在 Visual C++ 8 (Microsoft Visual Studio 2005 或 Microsoft Visual C++ 8 Express)环境下编译的详细信息, 可以参考VC8 Build Instructions.

也可以使用(但不推荐) mingw 的 gcc 来编译: 请参考 Compiling Mozilla with mingw.

[编辑] 平台软件开发工具包(SDK)

如果你安装的是 Visual Studio .NET 2003(或更高版本), 就可以省略下面的步骤了. 对于老编译器来说, 你还要下载 Microsoft 的 SDK 库.

Platform SDK可以从Platform SDK Update site 获得. 你必须安装 "Windows Core SDK" (Tools, Build Environment, and Redistributable Components) 和 "Web Workshop SDK" (Build Environment).

为了使build环境可以使用这个SDK, 以下需要被加入到环境中 (如下):

set PATH=C:\Program Files\Microsoft Platform SDK\bin;%PATH%
set INCLUDE=C:\Program Files\Microsoft Platform SDK\include;%INCLUDE%
set LIB=C:\Program Files\Microsoft Platform SDK\lib;%LIB%

[编辑] 环境配置

cygwin 和 MSVC++ 由环境变量来指定选项, 目录, 搜索路径. cygwin 继承了 Windows 的环境变量, 把这些环境变量映射到自己的 UNIX 类型的文件系统名字空间, 因此设置环境变量有许多方法. 在 cygwin 下编译, 你可以在 cygwin.bat 文件中设置环境变量. 而在 Windows 命令行下编译, 你可以在一个配置文件中设置, 或者: "我的电脑 -> 属性 -> 高级属性 -> 环境变量".

除了Visual C++, 如果编译工具安装路径中包含空格或其他特殊字符, 编译会出错.

下面的环境变量必须设置:

MOZ_TOOLS=C:\moztools
设置 Netscape 的 wintools.zip 的安装路径. 注意如果这个安装路径在cygwin路径下, Mozilla 将不会编译. 编译需要搜索 MOZ_TOOLS\include\glib.h 文件, 所以要确保 glib.h 在个这个目录下.

PATH=%PATH%;%MOZ_TOOLS%\bin;c:\cygwin\bin
包含Netscape 的 wintools 和 cygwin 的 UNIX 类的工具到命令搜索路径中.

注意: cygwin中有一个 link 工具, MSVC 自己有一个 link.exe 程序. 所以应该把 MSVC 的搜索路径放在 cygwin 之前(仅就编译Mozilla而言).

注意, .NET/VC7 用户: %GLIB_PREFIX%/bin 和 %LIBIDL_PREFIX%/bin 必须放在 %MOZ_TOOLS%/bin 目录之前.

注意: 如果你正制作一个安装程序, 必须把 c:\cygwin\bin 放在 c:\windows\system32 之前, 而不是上面的例子中相反的情形. 这是因为安装程序要依赖 cygwin 的 find 版本号. 但是 c:\cygwin\bin 仍然必须放在 MSVC 执行程序的目录之后. 下面的第二个例子展示了如何做到这一点:

HOME=C:\home
如果没有使用CVS, 可不必设置 HOME. 如果使用cvs, 把 HOME 设置成 cvs 创建.cvspass的位置. cygwin 也会用到 HOME 变量, HOME 也不应该包含诸如空格等字符.

注意: 如果你使用ssh, HOME 变量应该与 cygwin 中 /etc/passwd 文件的 home 路径相匹配. 参看 the cygwin FAQ.

你最好在一个配置文件中把上面的变量通通设好, 或者在 cygwin.bat 中设置. 下面是一个参考文件, 你可以修改这个文件, 生成你自己的配置文件.

VC7 下的一个例子:

@echo off
rem --- Basic config, with VC7 libIDL files
SET MOZ_TOOLS=C:\moztools
SET GLIB_PREFIX=C:\moztools\vc7_files
SET LIBIDL_PREFIX=C:\moztools\vc7_files
SET MINGWBASE=C:\Dev-Cpp
SET CYGWINBASE=C:\cygwin

rem --- Clean slate start
SET INCLUDE=
SET LIB=
SET PATH=C:\;C:\windows\system32;C:\windows;C:\windows\system32\wbem

rem --- Then prepend Cygwin path
SET PATH=%CYGWINBASE%\bin;%PATH%

rem --- Set VC7 compiler environment vars

CALL D:\vStudio.NET2003\Vc7\bin\vcvars32.bat

rem --- Add glib/libidl to build environment
SET PATH=%PATH%;%GLIB_PREFIX%;%GLIB_PREFIX%\bin
SET INCLUDE=%GLIB_PREFIX%\include;%INCLUDE%;%MINGWBASE%\include
SET LIB=%GLIB_PREFIX%\lib;%LIB%

rem -- moztools comes last after glib/libIDL
SET PATH=%PATH%;%MOZ_TOOLS%\bin

</dd>

下面是VC6下的例子, 它展示了如何建立一个Mozilla安装程序路径.

@echo off
rem --- Basic config
SET MOZ_TOOLS=C:\moztools
SET CYGWINBASE=C:\cygwin
SET HOME=%CYGWINBASE%\home\YOUR_USERNAME_HERE

rem --- Clean slate start
SET INCLUDE=
SET LIB=

rem PATH needs to be constructed carefully to avoid conflicts
rem between the binaries that Windows and Visual Studio provide
rem and those that Cygwin provides.  In particular, MSVC's "link"
rem utility should override Cygwin's, and Cygwin's "find" utility
rem  should override Windows'.

rem First set up basic Windows paths.
SET PATH=C:\;C:\windows\system32;C:\windows;C:\windows\system32\wbem

rem Then prepend Cygwin path and append Moztools path.
SET PATH=%CYGWINBASE%\bin;%PATH%;%MOZ_TOOLS%\bin

rem Finally, prepend MSVC paths using vcvars32.bat.
call C:\msvs\VC98\bin\vcvars32.bat

rem Now the PATH variable contains:
rem MSVC paths + Cygwin path + Windows paths + Moztools path

C:
chdir C:\cygwin\home\YOUR_USERNAME_HERE

bash --login -i

[编辑] 一般问题和提示

  • Check the Mozilla Build Frequently Asked Questions
  • 源代码必须安装在一个 /cygdrive/<c> 的 cygwin 的文件 mount 位置上(这个位置实际上是Dos下的某个逻辑硬盘的根目录). 一定不要安装在 cygwin 的 /home 上.
  • 如果把 Netscape 的 wintools 安装到 cygwin 目录或其子目录下, 编译会出错.
  • 如果配制和 build 失败的原因是因为丢失了 w32api, 请把 mingw32 的 /include 目录加到你的 INCLUDE 环境变量的末端. 我们并不需要 Mingw32 库或者 bin 目录, 只需要头部.
  • 如果 PATH 环境变量包含引号("), 编译可能出错. 引号不能正确地传递给 cygwin 的子 shell. 引号一般并不需要, 它们通常可以删掉的.
  • 要多检查几次以确定你拥有所有以上所列的 cygwin 需要的包. 如果没有, 运行 cygwin 安装程序并添加上没有安装的包.
  • Win32 Debugging FAQ: 在 Windows 环境下调试 Mozilla 的技巧.
  • 将 Windows build 系统从 VC6升级到 VC7?
  • 目录:Build Documentation