这篇文档列出了几个步骤,以便你在windows平台上编译最新的或者开发中的FireFox和Thunderbird.
硬件需求
Mozilla的编译即使在最新的硬件下也是需要大量时间的.Mozilla开发的最低硬件要求如下:
- 编译比较新的FireFox,至少需要2 GB的内存;建议8 GB或以上.
- 35 GB的硬盘空间(用来安装Visual Studio 2013 Community,the SDKs, the MozillaBuild package和存放源代码).
- Windows 7(SP1)或以上,因为 Windows Vista及以前的操作系统不支持VS 2013.
概述
大部分的Windows系统并没有安装编译Mozilla所需的工具. 除了安装Visual Studio, 你还必须安装MozillaBuild, 这是一个软件包, 包括编译Mozilla的许多工具.
Mozilla 代码库在Visual Studio 2013 (VC12)下可以编译出正式的发行版本. 注意Firefox 37不支持早期版本的Visual Studio. 只是因为我们已经开始使用C++11的一些新特性, 而Visual Studio 2012和更早的版本并不支持.
安装编译所需的软件
完成下面的每一步,否则你有可能不能成功编译. 在这些所需的软件下面有一些备注.
- 确保你的系统是最新的
- 安装Visual Studio Community 2013 (免费). 你也可以使用付费的Visual Studio (比如 VS2013 Professional)或 Visual Studio Express 2013 For Windows Desktop. VS2013 Community install的选项部分-包括the Microsoft Foundation Classes for C++ -对于编译Firefox并不是必须的.
- 下载并安装MozillaBuild, 其中包括一些额外的编译工具. 如果你已经安装了cygwin ,可以看一下小贴士部分的笔记. (在退出MozillaBuild 的安装后, 如果弹出一个带有重新安装选项对话框, 选择那个选项就可以了.) 关于MozillaBuild 的更多的信息和最新的版本的连接参考https://wiki.mozilla.org/MozillaBuild.
- 如果你想编译Windows 8 UI 的Firefox(formerly known as Metro) , 参考 Windows 8 Integration - Building Locally.
在安装的过程中有时候会产生以下一些问题:
编译Thunderbird and SeaMonkey需要MAPI头文件
- 因为Visual Studio 2013 (Windows SDK 8.1)没有把MAPI打包进去,所以你需要从 https://www.microsoft.com/en-us/download/details.aspx?id=12905 安装.你应该把头文件复制到Windows SDK的目录中,例如
可以C:\Program Files (x86)\Windows Kits\8.1\Include\shared,
以便编译程序可以找到.
重新生成一个发行版本:
- 只需安装 June 2010 DirectX SDK.
有多个版本的Visual Studio Express 2013.
- 支持" Windows Desktop"
- 不支持"Visual Studio 2013 Express For Web" 和"Visual Studio 2013 Express For Windows". 推荐安装 Visual Studio Community 2013 .
请注意如果安装软件的目录中存在空格或者其他的特殊符号,比如加号, 引号, Mozilla将不会编译.The Visual Studio tools and SDKs除外. 它们可以安装在有空格的目录下. 强烈建议把所有软件安装到默认位置.
打开编译命令行
在安装完所有必须的软件后, 打开MozillaBuild 安装目录的bat文件(默认c:\mozilla-build
):
start-shell-msvc2013.bat (
for Visual Studio
2013)
即使在64位的Windows上也不要用
start-shell-msvcNNNN-x64.bat
(除非你完全明白你在做什么). 这些文件是实验性质的而且不被完全支持. 参考Build:MozillaBuild For x64 wiki page.
这会执行一个配置好的MSYS / BASH 命令行去编译代码库, 以后的命令应该在这个窗口被执行. (注意这个和Windows 的CMD.EXE不一样.)
创建代码目录
注意: 如果你位于带有空格的目录下, 将不能编译Firefox源代码(例如不要用"Documents and Settings").你可以将代码放在任何位置, 比如C:\mozilla-central.
创建一个新的目录存放代码是极好的:
cd /c; mkdir mozilla-source; cd mozilla-source
现在你可以准备拿到Firefox 代码并去编译它; 参考 Simple Firefox build (Get_the_source).
关于一些命令的小贴士
- 如果想把命令粘贴到命令行窗口, 你必须右击窗口的左上角, 把鼠标移到编辑菜单, 点击粘贴. 也可以在属性菜单设置成快速编辑模式, 然后在窗口右击,选择粘贴.
- 如果你安装了cygwin, make sure that the MozillaBuild directories come before any cygwin directories in the search path (use
echo $PATH
to see your search path). - 在MSYS / BASH 命令行窗口中,c盘就是一个根目录下的子目录. 所以如果你想切换到目录
c:\mydir
, 你应该使用cd /c/mydir
. 注意是YNIX-style(/)而不是Windows-style(\). - 如果你使用的是默认安装路径, MSYS 的根目录位于
c:\mozilla-build\msys
.不要编译这个目录下的东西, 你可以用诸如/c/mydir
来代替.
一些共通的问题,注意事项和限制条件
- Debugging Mozilla on Windows FAQ: 关于如何在Windows上debug Mozilla的小贴士.
- 如果你的环境变量包含引号("), 那么编译有可能会失败. 当引号被传给MozillaBuild sub-shells时, 可能会发生解析错误. 引号并不是必须的,你可以把他们从环境变量里去掉.
- 如果你设置了
PYTHON
环境变量, 编译有可能会失败. 你会看到"The system cannot find the file specified
"的错误信息. 在运行编译工具之前在命令行中输入"SET PYTHON=
"会修复这个问题. 确认PYTHON
是unset 而不是设置了一个空值. 在命令行中"SET PYTHON
"(不带等号)应该返回: "Environment variable PYTHON is not defined
". - 如果你安装了cygwin, 编译有可能会失败. 确保环境变量PATH中MozillaBuild路径 (
c:\mozilla-build
and subdirectories)在cygwin路径的前面. 如果这还不其作用,要么从PATH中删除cygwin, 要么换一台没有安装cygwin的电脑. - Building with versions of NSIS other than the version that comes with the latest supported version of MozillaBuild is not supported and will likely fail.
- 如果你想把你的build发送给其他人, 需要
在
mozconfig设置32_REDIST_DIR=$VCINSTALLDIR\redist\x86\Microsoft.VC80.CRT
. - Microsoft Antimalware service 可以干扰到compilation, 在编译过程中经常会出现一个跟
conftest.exe有关系的错误.
To remedy this, add at least your object directory to the exclusion settings. - 如果你碰见一个未能找到atlbase.h的错误, 并且你安装了Visual Studio 10 Express, 你可能得删掉注册表项.关键字是HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VC.
- 如果你碰见一个像"second C linkage of overloaded function '_interlockedbittestandset' not allowed"这样的错误, 这是由 intrin.h 和windows.h一起被引用导致的,用#define去重新定义即可.参考using intrin.h.
- 并行编译在Windows上不起作用. 你应该使用
mozmake
命令.
警告: 如果你遵循了下面的建议, 你的计算机将会更容易受到攻击, 确认你采取了足够的保护措施.
- 如果在运行
make的时候
, 仍然发生崩溃, 你可能碰到了来自Windows Security Updates的干预. 在这种情况下, 如果是 Windows XP, 你需要卸载Windows XP Security Updates KB933729 and KB970238.这些不定首次出现在Windows XP Service Pack 3, 所以如果你安装了SP3, 你必须卸载它并安装Service Pack 2,包括所有的Windows updates (除了KB933729, KB936929, and KB970238). 为了防止自动安装这些补丁,选择"Notify me but don't automatically download or install them" in the Control Panel's "Automatic Updates" 对话框. 当开始更新的时候, 去掉这些补丁.
Microsoft DirectX SDK (当使用 Windows SDK Version 7 或更低版本)
如果你在使用Windows SDK Version 8之前的版本时, 必须安装 June 2010 DirectX SDK以便编译ANGLE ,作为安装 DirectX SDK的一部分,你必须安装End-User Redistributable Packages, 不要取消勾选它.为了编译出完整的Firefox, 对任何版本的Visual Studio来说,June 2010 DirectX SDK都是必须的. 对于在Windows 7及以后系统上的开发, Windows 8 SDK包含了所有的编译必须的工具.
注意: 在 DirectX SDK的安装的最后几步, 可能会显示一个"S1023"错误, 可以直接忽视. 如果Mozilla 编译系统仍然不能找到DirectX SDK的位置, 参考see this Microsoft support page.
MozillaBuild
MozillaBuild package 包含了一些编译Mozilla的必备工具, 包括MSYS build environment, Mercurial, autoconf-2.13, CVS, Python, YASM, NSIS, and UPX, 还有可选却有用的,例如wget and emacs.
Download the current MozillaBuild package.
工具包默认安装在c:\mozilla-build
. 建议不要修改安装路径. 不要使用包含空格的路径. 安装过程中不会修改注册表. 注意一些包可能需要运行Visual C++ Redistributable package .
预期设置: 注意由MozillaBuild提供的"UNIX-like" 的环境对于编译和提交Mozilla代码是唯一有用的. 你期望的大部分安装在Linux系统上的命令行工具并不在其中. 因为这些工具已经出现了多达数十年或者更久(特别是那些由MSYS提供的). 就是这些老的工具经常导致各种问题, 因为他们不支持最新的标准.例如, 用cp -rf src1 src2来拷贝代码不能正常工作
. MozillaBuild 支持精英开发者对Mozilla代码进行开发.但是, 当做完上述工作以后, 如果还是碰见各种问题也是很正常的.