如何在windows下编译Chrome源代码

如何在windows下编译Chrome源代码,第1张

一,编译之前的准备。

1) 了解代码组织结构。

Chrome source非常庞大,并且在其主目录下还包含有工具和组件,任何一个工具和组件也附带有其源代码。首先得熟悉这些源代码的组织结构,在http://srcchromiumorg/svn/中包含如下子目录:releases,曾经发布过的chrome源代码的正式版本;trunk,当前最新的源代码。由于releases中的代码比较旧,这里就不做说明了,只说明trunk的结构。在trunk下面有3个重要的目录,deps包含了chrome编译和运行所需要的全部组件的代码。src里面包含的则是chrome的主程序的代码,tools包含的是下载和配置编译所需要的第三方工具的压缩包和源代码,其中就有svn和python这2个比较重要的工具,后面再详细介绍。暂时做这样一个简单的介绍,因为其组织结构比较负责,以后再作补充斧正。

2)如何下载和同步源代码。

首先谈谈下载:

1,最简单的方法是从chrome官网上直接下载源代码压缩包,地址是http://buildchromiumorg/buildbot/archives/chromium_tarballhtml。

2,或者采用svn从http://srcchromiumorg/svn/trunk/src这个地方heckout,这要求你先在本地建一个源代码的主目录。

3,另外一个办法则是采用google提供的一个部署工具depot_tools。虽然这几种办法都可下载完整的源代码,但目前的情况是:chrome基于Visual Stdio 2005 进行编译,如果顺利完成编译工作,自然少不了sln文件,较早的源代码中包含有现成的sln和vcproject文件,但后来做了修改,这些文件被抛弃掉,Google自己开发了一种脚本工具叫做GYP,这个工具采用python编写,GYP采用了自定义的一套规则,用于生成各种工程文件。而关键的python则包含于depot_tools中,因此不论采用什么方法下载的代码,都得下载depot_tools这个工具,以获得必须的工程文件。

depot_tools位于 http://srcchromiumorg/svn/trunk/tools 下面,包括一个目录和一个zip格式的压缩包。

3)关于编译器

前面提到Chrome采用Visual Stdio 2005进行编译,根据http://devchromiumorg的说明,需进行如下操作正常编译

a, 安装Visual Studio 2005

b, 安装Visual Studio 2005 Service Packe 1

c, 安装Visual Studio Hotfix 947315

d, 如果是vista系统,还需安装Visual Studio 2005 Service Packe 1 Update for Windows Vista

e, 安装Windows 2008 SDK,如果是Visual Studio 2008则不需要这一步。

f, 配置Windows 2008 SDK,使2008 SDK成为首选开发库,以获得一些新功能和特性。办法是在开始->程序->Microsoft Windows SDK v61 > Visual Studio Registration > Windows SDK Configuration Tool,选择make current按钮。也可以在VS里面手动配置include和libary路径,效果是一样的。

二,如何配置工程文件

1,如果是采用depot_tools,那么从代码下载到生成sln文件会自动完成。其步骤是

(1)下载depot_tools到本地存储,假设位于d:/depot_tools

(2)将d:/depot_tools添加到系统环境变量中。

(3)创建一个源代码根目录,假设为 d:/chrome,目录不得包含空格。

(4)在命令行下切换当前目录到d:/chrome。

(5)执行命令 gclient config http://srcchromiumorg/svn/trunk/src ,该命令会首先下载svn和python分别到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。

(6)执行命令 gclient sync 这个命令会调用svn同步源代码。这个过程会比较漫长。全部完成之后全部源代码就保存在d:/chrome里面。未编译的代码大约有4个G左右,过程将十分漫长。这样获得的源代码已经包含所有的工程文件,可直接打开。

重点说明一下gclient,它实际上是一个批处理文件,它主要做了如下一些事情,首先设置环境变量,如代码根目录,工具根目录等。其次调用win_toolsbat从服务器下载svn和python。最后调用pythonexe对Chromegyp进行解析生成所有工程文件。

另外需要说明的是,gclient sync的过程非常漫长,根据命令行的提示来看总共需要同步67个项目(不是工程),期间可能会因为一些原因导致错误而退出这个过程,需要继续调用sync。比如网络出现故障svn会多次进入sleep状态然后重试,如果多次失败就会报错退出,还有的情况是某些子目录的属性问题无法同步,可根据提示进行操作。还有个目前新出现的问题,下面2个目录“src/webkit/data/layout_tests/LayoutTests”和“src/third_party/WebKit/LayoutTests”的源代码是从srcwebkitorg签出来的,但是这个网站目前存在问题无法签出代码, 需要屏蔽掉这2个目录,由于里面是测试代码,即使丢弃也不会影响整个工程的编译,方法是打开trunk下面的gclient文件,向里面添加如下内容

"custom_deps" : {

"src/webkit/data/layout_tests/LayoutTests":None,

"src/third_party/WebKit/LayoutTests":None,

},

这样svn就能完成代码的同步了。最后gclient会调用depot_tools/python_bin/pythonexe 对 src/build/gyp_

chromium进行处理,这样就得到了所有的sln和vcproject文件。

2,如果是下载的代码压缩包或者checkout的代码,代码目录里面没有sln文件,这个时候需要调用命令行进入源代码根目录,然后执行命令 gclient runhooks --force,命令执行后会直接对Chromegyp进行解析,生成sln文件。

在实际下载过程中,最开始的时候我用TortoiseSVN从http://srcchromiumorg/svn/trunk/src checkout源代码,但是得到的代码只有几百兆,执行gclient runhooks --force命令后也没有找到sln文件,具体原因未知,不建议使用此方式。而直接下载代码压缩包的方式没有尝试过,不知道是否可行。因此最稳妥的方法还是使用depot_tools来部署和处理源代码。

三 编译工程

启动Visual Studio 2005打开 src/chrome/browser/chromesln,或者打开src/build/allsln,如果打开的是chromesln里面包含480个工程,而allsln则包含507个工程,一些09年的编译说明提到有300左右的工程,可见chrome的代码变动比较大。对整个解决方案进行编译,打开需要2个小时才能完成编译,视硬件环境而定,内存越大越快,推荐4G以上内存,酷睿2核或者4核。编译完成以后据说会占用30G的空间。编译后的文件位于 d:/chorme/chrome/debug 目录或者 d:/chorme/chrome/release目录下。

四 chrome涉及的开源项目

Chrome 采用了很多开源项目,这里把它们列出来以备后用,目前Chrome涉及25个开源代码:

1、Google Breakpad

/src/breakpad

开源的跨开台程序崩溃报告系统。

2、Google URL

/src/googleurl

Google小巧的URL解析整理库。

3、Skia

/src/skia

矢量图引擎。

4、Google v8

/src/v8

Google开源的JavaScript引擎。V8实现了ECMA-262第三版的ECMAScript规范,可运行于Windows XP 和 Vista, Mac OS X 105 (Leopard), 及 Linux等基于IA-32 或 ARM 的系统之上。V8可单独运行也可嵌入到任何C++程序中。

5、Webkit

/src/webki

开源的浏览器引擎

6、Netscape Portable Runtime (NSPR)

/src/base/third_party/nspr

Netscape Portable Runtime (NSPR) 提供了系统级平台无关的API及类似libc的函数。

7、Network Security Services (NSS)

/src/base/third_party/nss

Network Security Services (NSS) 一套用于支持服务器端与客户端安全开发的跨平台函数库。程序通过NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X509 v3 认证及其它一些安全标准。

8、Hunspell

/src/chrome/third_party/hunspell

Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding

9、Windows Template Library

/src/chrome/third_party/wtl

用于开发Windows程序与UI组件的C++ library。WTL扩展了ATL (Active Template Library) 并提供一套用于controls, dialogs, frame windows, GDI objects等开发的类。

10、Google C++ Testing Framework

/src/testing/gtest

Google用于编写C++测试的基于xUnit架构的框架,可用于多种平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自动测试发现,有一套丰富的Assertions断言,用于可自定义断言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation

11、bsdiff 与 bspatch

/src/third_party/bsdiff 及 /src/third_party/bspatch

bsdiff 与 bspatch 用于为二进制文件生成补丁。

12、bzip2

/src/third_party/bzip2

bzip2使用Burrows-Wheeler block sorting text compression 算法与Huffman编码压缩文件。

13、International Components for Unicode (ICU)

/src/third_party/icu38

ICU是一套成熟并被广泛使用的C/C++ 及 Java 库,可为软件提供Unicode与全球化支持。

14、libjpeg

/src/third_party/libjpeg

用于处理JPEG (JFIF)图像格式的库。

15、libpng

/src/third_party/libpng

PNG图像格式库。支持绝大部分的PNG特性,可扩展。已经被广泛地使用了13年以上了。

16、libxml

/src/third_party/libxml

C语言的XML解析库。

17、libxslt

/src/third_party/libxslt

C语言的XSLT库。

18、LZMA

/src/third_party/lzma_sdk

LZMA为7-Zip软件中7z格式压缩所使用的压缩算法,有很好的压缩效果。

19、stringencoders

/src/third_party/modp_b64

一系列高性能的c-string转换函数,比如:base 64 encoding/decoding。通常比其标准实现快两倍以上。

20、Netscape Plugin Application Programming Interface (NPAPI)

/src/third_party/npapi

多种浏览器使用的跨平台插件架构。

21、Pthreads-w32

/src/third_party/pthread

用于编写多线程程序的API

22、SCons - a software construction tool

/src/third_party/scons

开源的软件构建工具——下一代的编译工具。可以认为SCons是改进过的跨平台配上autoconf/automake与ccache的Make工具的子系统。

23、sqlite

/src/third_party/sqlite

大名鼎鼎的嵌入式数据库引擎。自管理、零配置、无需服务器、支持事务。

24、TLS Lite

/src/third_party/tlslite

SSL 30, TLS 10, and TLS 11的Python免费实现库。TLS Lite支持这些安全验证方式:SRP, shared keys, and cryptoIDs in addition to X509 certificates。注:Chrome并不包涵Python。TLS Lite用于Chrome开发过程中的代码覆盖、依赖检查、网页加载时间测试及生成html结果比较等。

25、zlib

/src/third_party/zlib

zlib为一套用于任意平台与机器的无损数据压缩的库,它免费、自由、无任何法律专利问题。

linux的需要打命令了,groupadd

useradd

什么的,useradd

test

-G

的,比较乱,可以在linux里桌面中打开samba服务器,添加用户和组。

1、建用户:

adduser

phpq

//新建phpq用户

passwd

phpq

//给phpq用户设置密码

2、建工作组

groupadd

test

//新建test工作组

3、新建用户同时增加工作组

useradd

-g

test

phpq

//新建phpq用户并增加到test工作组

注::-g

所属组

-d

家目录

-s

所用的SHELL

4、给已有的用户增加工作组

usermod

-G

groupname

username

或者:gpasswd

-a

user

group

5、临时关闭:在/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上就可以了。想恢复该用户,去掉即可。

或者使用如下命令关闭用户账号:

passwd

peter

–l

重新释放:

passwd

peter

–u

6、永久性删除用户账号

userdel

peter

groupdel

peter

usermod

–G

peter

peter

(强制删除该用户的主目录和主目录下的所有文件和子目录)

7、从组中删除用户

编辑/etc/group

找到GROUP1那一行,删除

A

或者用命令

gpasswd

-d

A

GROUP

8、显示用户信息

id

user

cat

/etc/passwd

因为不是Jenkins容器目录从而导致报错。

代码是储存在docker容器内,而Jenkins在构建时跑dockerrun命令时调用的是本地目录,不是Jenkins容器目录从而导致报错。解决方法如下:

1、maven的pom文件的修改:需要在依赖下标签中中加入。做完这步,可以本地先跑一下mvntest,可以直接在开发工具中运行。本地调试脚本没有问题就可以进行第二步。

2、选择项目右击---Runas---Mavenbuild输入命令test就可以了。

3、jenkins新建一个maven项目,然后选择svn目录,构建输入test命令,然后可以在构建后添加一个TestNGXMLreport也可以添加别的测试报告。记得下载对应的插件。

一,编译之前的准备。

1) 了解代码组织结构。

Chrome source非常庞大,并且在其主目录下还包含有工具和组件,任何一个工具和组件也附带有其源代码。首先得熟悉这些源代码的组织结构,在http://srcchromiumorg/svn/中包含如下子目录:releases,曾经发布过的chrome源代码的正式版本;trunk,当前最新的源代码。由于releases中的代码比较旧,这里就不做说明了,只说明trunk的结构。在trunk下面有3个重要的目录,deps包含了chrome编译和运行所需要的全部组件的代码。src里面包含的则是chrome的主程序的代码,tools包含的是下载和配置编译所需要的第三方工具的压缩包和源代码,其中就有svn和python这2个比较重要的工具,后面再详细介绍。暂时做这样一个简单的介绍,因为其组织结构比较负责,以后再作补充斧正。

2)如何下载和同步源代码。

首先谈谈下载:

1,最简单的方法是从chrome官网上直接下载源代码压缩包,地址是http://buildchromiumorg/buildbot/archives/chromium_tarballhtml。

2,或者采用svn从http://srcchromiumorg/svn/trunk/src这个地方heckout,这要求你先在本地建一个源代码的主目录。

3,另外一个办法则是采用google提供的一个部署工具depot_tools。虽然这几种办法都可下载完整的源代码,但目前的情况是:chrome基于Visual Stdio 2005 进行编译,如果顺利完成编译工作,自然少不了sln文件,较早的源代码中包含有现成的sln和vcproject文件,但后来做了修改,这些文件被抛弃掉,Google自己开发了一种脚本工具叫做GYP,这个工具采用python编写,GYP采用了自定义的一套规则,用于生成各种工程文件。而关键的python则包含于depot_tools中,因此不论采用什么方法下载的代码,都得下载depot_tools这个工具,以获得必须的工程文件。

depot_tools位于 http://srcchromiumorg/svn/trunk/tools 下面,包括一个目录和一个zip格式的压缩包。

3)关于编译器

前面提到Chrome采用Visual Stdio 2005进行编译,根据http://devchromiumorg的说明,需进行如下操作正常编译

a, 安装Visual Studio 2005

b, 安装Visual Studio 2005 Service Packe 1

c, 安装Visual Studio Hotfix 947315

d, 如果是vista系统,还需安装Visual Studio 2005 Service Packe 1 Update for Windows Vista

e, 安装Windows 2008 SDK,如果是Visual Studio 2008则不需要这一步。

f, 配置Windows 2008 SDK,使2008 SDK成为首选开发库,以获得一些新功能和特性。办法是在开始->程序->Microsoft Windows SDK v61 > Visual Studio Registration > Windows SDK Configuration Tool,选择make current按钮。也可以在VS里面手动配置include和libary路径,效果是一样的。

二,如何配置工程文件

1,如果是采用depot_tools,那么从代码下载到生成sln文件会自动完成。其步骤是

(1)下载depot_tools到本地存储,假设位于d:/depot_tools

(2)将d:/depot_tools添加到系统环境变量中。

(3)创建一个源代码根目录,假设为 d:/chrome,目录不得包含空格。

(4)在命令行下切换当前目录到d:/chrome。

(5)执行命令 gclient config http://srcchromiumorg/svn/trunk/src ,该命令会首先下载svn和python分别到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。

(6)执行命令 gclient sync 这个命令会调用svn同步源代码。这个过程会比较漫长。全部完成之后全部源代码就保存在d:/chrome里面。未编译的代码大约有4个G左右,过程将十分漫长。这样获得的源代码已经包含所有的工程文件,可直接打开。

重点说明一下gclient,它实际上是一个批处理文件,它主要做了如下一些事情,首先设置环境变量,如代码根目录,工具根目录等。其次调用win_toolsbat从服务器下载svn和python。最后调用pythonexe对Chromegyp进行解析生成所有工程文件。

另外需要说明的是,gclient sync的过程非常漫长,根据命令行的提示来看总共需要同步67个项目(不是工程),期间可能会因为一些原因导致错误而退出这个过程,需要继续调用sync。比如网络出现故障svn会多次进入sleep状态然后重试,如果多次失败就会报错退出,还有的情况是某些子目录的属性问题无法同步,可根据提示进行操作。还有个目前新出现的问题,下面2个目录“src/webkit/data/layout_tests/LayoutTests”和“src/third_party/WebKit/LayoutTests”的源代码是从srcwebkitorg签出来的,但是这个网站目前存在问题无法签出代码, 需要屏蔽掉这2个目录,由于里面是测试代码,即使丢弃也不会影响整个工程的编译,方法是打开trunk下面的gclient文件,向里面添加如下内容

"custom_deps" : {

"src/webkit/data/layout_tests/LayoutTests":None,

"src/third_party/WebKit/LayoutTests":None,

},

这样svn就能完成代码的同步了。最后gclient会调用depot_tools/python_bin/pythonexe 对 src/build/gyp_

chromium进行处理,这样就得到了所有的sln和vcproject文件。

2,如果是下载的代码压缩包或者checkout的代码,代码目录里面没有sln文件,这个时候需要调用命令行进入源代码根目录,然后执行命令 gclient runhooks --force,命令执行后会直接对Chromegyp进行解析,生成sln文件。

在实际下载过程中,最开始的时候我用TortoiseSVN从http://srcchromiumorg/svn/trunk/src checkout源代码,但是得到的代码只有几百兆,执行gclient runhooks --force命令后也没有找到sln文件,具体原因未知,不建议使用此方式。而直接下载代码压缩包的方式没有尝试过,不知道是否可行。因此最稳妥的方法还是使用depot_tools来部署和处理源代码。

三 编译工程

启动Visual Studio 2005打开 src/chrome/browser/chromesln,或者打开src/build/allsln,如果打开的是chromesln里面包含480个工程,而allsln则包含507个工程,一些09年的编译说明提到有300左右的工程,可见chrome的代码变动比较大。对整个解决方案进行编译,打开需要2个小时才能完成编译,视硬件环境而定,内存越大越快,推荐4G以上内存,酷睿2核或者4核。编译完成以后据说会占用30G的空间。编译后的文件位于 d:/chorme/chrome/debug 目录或者 d:/chorme/chrome/release目录下。

四 chrome涉及的开源项目

Chrome 采用了很多开源项目,这里把它们列出来以备后用,目前Chrome涉及25个开源代码:

1、Google Breakpad

/src/breakpad

开源的跨开台程序崩溃报告系统。

2、Google URL

/src/googleurl

Google小巧的URL解析整理库。

3、Skia

/src/skia

矢量图引擎。

4、Google v8

/src/v8

Google开源的JavaScript引擎。V8实现了ECMA-262第三版的ECMAScript规范,可运行于Windows XP 和 Vista, Mac OS X 105 (Leopard), 及 Linux等基于IA-32 或 ARM 的系统之上。V8可单独运行也可嵌入到任何C++程序中。

5、Webkit

/src/webki

开源的浏览器引擎

6、Netscape Portable Runtime (NSPR)

/src/base/third_party/nspr

Netscape Portable Runtime (NSPR) 提供了系统级平台无关的API及类似libc的函数。

7、Network Security Services (NSS)

/src/base/third_party/nss

Network Security Services (NSS) 一套用于支持服务器端与客户端安全开发的跨平台函数库。程序通过NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X509 v3 认证及其它一些安全标准。

8、Hunspell

/src/chrome/third_party/hunspell

Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding

9、Windows Template Library

/src/chrome/third_party/wtl

用于开发Windows程序与UI组件的C++ library。WTL扩展了ATL (Active Template Library) 并提供一套用于controls, dialogs, frame windows, GDI objects等开发的类。

10、Google C++ Testing Framework

/src/testing/gtest

Google用于编写C++测试的基于xUnit架构的框架,可用于多种平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自动测试发现,有一套丰富的Assertions断言,用于可自定义断言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation

11、bsdiff 与 bspatch

/src/third_party/bsdiff 及 /src/third_party/bspatch

bsdiff 与 bspatch 用于为二进制文件生成补丁。

12、bzip2

/src/third_party/bzip2

bzip2使用Burrows-Wheeler block sorting text compression 算法与Huffman编码压缩文件。

13、International Components for Unicode (ICU)

/src/third_party/icu38

ICU是一套成熟并被广泛使用的C/C++ 及 Java 库,可为软件提供Unicode与全球化支持。

14、libjpeg

/src/third_party/libjpeg

用于处理JPEG (JFIF)图像格式的库。

15、libpng

/src/third_party/libpng

PNG图像格式库。支持绝大部分的PNG特性,可扩展。已经被广泛地使用了13年以上了。

16、libxml

/src/third_party/libxml

C语言的XML解析库。

17、libxslt

/src/third_party/libxslt

C语言的XSLT库。

18、LZMA

/src/third_party/lzma_sdk

LZMA为7-Zip软件中7z格式压缩所使用的压缩算法,有很好的压缩效果。

19、stringencoders

/src/third_party/modp_b64

一系列高性能的c-string转换函数,比如:base 64 encoding/decoding。通常比其标准实现快两倍以上。

20、Netscape Plugin Application Programming Interface (NPAPI)

/src/third_party/npapi

多种浏览器使用的跨平台插件架构。

21、Pthreads-w32

/src/third_party/pthread

用于编写多线程程序的API

22、SCons - a software construction tool

/src/third_party/scons

开源的软件构建工具——下一代的编译工具。可以认为SCons是改进过的跨平台配上autoconf/automake与ccache的Make工具的子系统。

23、sqlite

/src/third_party/sqlite

大名鼎鼎的嵌入式数据库引擎。自管理、零配置、无需服务器、支持事务。

24、TLS Lite

/src/third_party/tlslite

SSL 30, TLS 10, and TLS 11的Python免费实现库。TLS Lite支持这些安全验证方式:SRP, shared keys, and cryptoIDs in addition to X509 certificates。注:Chrome并不包涵Python。TLS Lite用于Chrome开发过程中的代码覆盖、依赖检查、网页加载时间测试及生成html结果比较等。

25、zlib

/src/third_party/zlib

zlib为一套用于任意平台与机器的无损数据压缩的库,它免费、自由、无任何法律专利问题。

DOS系统命令都能用输入command能查看面命令 环境变量PATH面应用程序名作命令用

面总结些东西内容太

关某命令详细信息请键入 HELP 命令名

XPCMD命令全

关某命令详细信息请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联AT 计划计算机运行命令程序ATTRIB 显示或更改文件属性BREAK 设置或清除扩展式 CTRL+C 检查CACLS 显示或修改文件访问控制列表(ACLs)CALL 另批处理程序调用CD 显示前目录名称或其更改CHCP 显示或设置代码页数CHDIR 显示前目录名称或其更改CHKDSK 检查磁盘并显示状态报告CHKNTFS 显示或修改启间磁盘检查CLS 清除屏幕CMD 打另 Windows 命令解释程序窗口COLOR 设置默认控制台前景背景颜色COMP 比较两或两套文件内容COMPACT 显示或更改 NTFS 区文件压缩CONVERT FAT 卷转换 NTFS您能转换前驱器COPY 至少文件复制另位置DATE 显示或设置期DEL 删除至少文件DIR 显示目录文件目录DISKCOMP 比较两软盘内容DISKCOPY 软盘内容复制另软盘DOSKEY 编辑命令行、调用 Windows 命令并创建宏ECHO 显示消息或命令显打或关ENDLOCAL 结束批文件环境更改本化ERASE 删除至少文件EXIT 退 CMDEXE 程序(命令解释程序)FC 比较两或两套文件并显示同处FIND 文件搜索文字字符串FINDSTR 文件搜索字符串FOR 套文件每文件运行指定命令FORMAT 格式化磁盘便跟 Windows 使用FTYPE 显示或修改用于文件扩展名关联文件类型GOTO Windows 命令解释程序指向批处理程序某标明行GRAFTABL 启用 Windows 图像模式显示扩展字符集HELP 提供 Windows 命令帮助信息IF 执行批处理程序条件性处理LABEL 创建、更改或删除磁盘卷标MD 创建目录MKDIR 创建目录MODE 配置系统设备MORE 显示结屏幕MOVE 文件目录移另目录PATH 显示或设置执行文件搜索路径PAUSE 暂停批文件处理并显示消息POPD 原 PUSHD 保存前目录值PRINT 打印文本文件PROMPT 更改 Windows 命令提示符PUSHD 保存前目录其进行更改RD 删除目录RECOVER 问题磁盘恢复读信息REM 记录批文件或 CONFIGSYS 注释REN 重命名文件RENAME 重命名文件REPLACE 替换文件RMDIR 删除目录SET 显示、设置或删除 Windows 环境变量SETLOCAL 始批文件环境更改本化SHIFT 更换批文件替换参数位置SORT 输入进行类START 启另窗口运行指定程序或命令SUBST 路径跟驱器号关联TIME 显示或设置系统间TITLE 设置 CMDEXE 窗口标题TREE 图形模式显示驱器或路径目录结构TYPE 显示文本文件内容VER 显示 Windows 版本VERIFY 告诉 Windows 否验证文件否已确写入磁盘VOL 显示磁盘卷标序列号XCOPY 复制文件目录树

appwizcpl------------添加删除程序

control userpasswords2--------用户帐户设置

cleanmgr-------垃圾整理

CMD--------------命令提示符作 Windows 附件PingConvert 些能图形环境 使用功能要借助完

cmd------jview察看Java虚拟机版本

commandcom------调用则系统内置 NTVDM DOS虚拟机完全类似 Virtual PC 虚拟环境系统本身联系我命令提示符运行 DOS 程序实际 自转移 NTVDM虚拟机 CMD 本身没关系

calc-----------启计算器

chkdskexe-----Chkdsk磁盘检查

compmgmtmsc---计算机管理

conf-----------启 netmeeting

control userpasswords2-----User Account 权限设置

devmgmtmsc--- 设备管理器

diskmgmtmsc---磁盘管理实用程序

dfrgmsc-------磁盘碎片整理程序

drwtsn32------ 系统医

dvdplay--------启Media Player

dxdiag-----------DirectX Diagnostic Tool

gpeditmsc-------组策略编辑器

gpupdate /target:computer /force 强制刷新组策略

eventvwrexe-----事件查看器

explorer-------打资源管理器

logoff---------注销命令

lusrmgrmsc----本机用户组

msinfo32---------系统信息

msconfig---------系统配置实用程序

net start (servicename)----启该服务

net stop (servicename)-----停止该服务

notepad--------打记事本

nusrmgrcpl-------同control userpasswords打用户帐户控制面板

Nslookup-------IP址侦测器

oobe/msoobe /a----检查XP否激

perfmonmsc----计算机性能监测程序

progman--------程序管理器

regedit----------注册表编辑器

regedt32-------注册表编辑器

regsvr32 /u dll----停止dll文件运行

route print------查看路由表

rononce -p ----15秒关机

rsopmsc-------组策略结集

rundll32exe rundll32exe %Systemroot%System32shimgvwdll,ImageView_Fullscreen----启空白Windows 传真查看器

secpolmsc--------本安全策略

servicesmsc---本服务设置

sfc /scannow-----启系统文件检查器

sndrec32-------录音机

taskmgr-----任务管理器(适用于2000/xp/2003)

tsshutdn-------60秒倒计关机命令

winchat--------XP自带局域网聊

winmsd---------系统信息

winver-----显示About Windows 窗口

wupdmgr-----------Windows Update

一,编译之前的准备。

1) 了解代码组织结构。

Chrome source非常庞大,并且在其主目录下还包含有工具和组件,任何一个工具和组件也附带有其源代码。首先得熟悉这些源代码的组织结构,在中包含如下子目录:releases,曾经发布过的chrome源代码的正式版本;trunk,当前最新的源代码。由于releases中的代码比较旧,这里就不做说明了,只说明trunk的结构。在trunk下面有3个重要的目录,deps包含了chrome编译和运行所需要的全部组件的代码。src里面包含的则是chrome的主程序的代码,tools包含的是下载和配置编译所需要的第三方工具的压缩包和源代码,其中就有svn和python这2个比较重要的工具,后面再详细介绍。暂时做这样一个简单的介绍,因为其组织结构比较负责,以后再作补充斧正。

2)如何下载和同步源代码。

首先谈谈下载:

1,最简单的方法是从chrome官网上直接下载源代码压缩包,地址是。

2,或者采用svn从trunk/src这个地方heckout,这要求你先在本地建一个源代码的主目录。

3,另外一个办法则是采用google提供的一个部署工具depot_tools。虽然这几种办法都可下载完整的源代码,但目前的情况是:chrome基于Visual Stdio 2005 进行编译,如果顺利完成编译工作,自然少不了sln文件,较早的源代码中包含有现成的sln和vcproject文件,但后来做了修改,这些文件被抛弃掉,Google自己开发了一种脚本工具叫做GYP,这个工具采用python编写,GYP采用了自定义的一套规则,用于生成各种工程文件。而关键的python则包含于depot_tools中,因此不论采用什么方法下载的代码,都得下载depot_tools这个工具,以获得必须的工程文件。

depot_tools位于 trunk/tools 下面,包括一个目录和一个zip格式的压缩包。

3)关于编译器

前面提到Chrome采用Visual Stdio 2005进行编译,根据的说明,需进行如下操作正常编译

a, 安装Visual Studio 2005

b, 安装Visual Studio 2005 Service Packe 1

c, 安装Visual Studio Hotfix 947315

d, 如果是vista系统,还需安装Visual Studio 2005 Service Packe 1 Update for Windows Vista

e, 安装Windows 2008 SDK,如果是Visual Studio 2008则不需要这一步。

f, 配置Windows 2008 SDK,使2008 SDK成为首选开发库,以获得一些新功能和特性。办法是在开始->程序->Microsoft Windows SDK v61 > Visual Studio Registration > Windows SDK Configuration Tool,选择make current按钮。也可以在VS里面手动配置include和libary路径,效果是一样的。

二,如何配置工程文件

1,如果是采用depot_tools,那么从代码下载到生成sln文件会自动完成。其步骤是

(1)下载depot_tools到本地存储,假设位于d:/depot_tools

(2)将d:/depot_tools添加到系统环境变量中。

(3)创建一个源代码根目录,假设为 d:/chrome,目录不得包含空格。

(4)在命令行下切换当前目录到d:/chrome。

(5)执行命令 gclient config trunk/src ,该命令会首先下载svn和python分别到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。

(6)执行命令 gclient sync 这个命令会调用svn同步源代码。这个过程会比较漫长。全部完成之后全部源代码就保存在d:/chrome里面。未编译的代码大约有4个G左右,过程将十分漫长。这样获得的源代码已经包含所有的工程文件,可直接打开。

重点说明一下gclient,它实际上是一个批处理文件,它主要做了如下一些事情,首先设置环境变量,如代码根目录,工具根目录等。其次调用win_toolsbat从服务器下载svn和python。最后调用pythonexe对Chromegyp进行解析生成所有工程文件。

另外需要说明的是,gclient sync的过程非常漫长,根据命令行的提示来看总共需要同步67个项目(不是工程),期间可能会因为一些原因导致错误而退出这个过程,需要继续调用sync。比如网络出现故障svn会多次进入sleep状态然后重试,如果多次失败就会报错退出,还有的情况是某些子目录的属性问题无法同步,可根据提示进行操作。还有个目前新出现的问题,下面2个目录“src/webkit/data/layout_tests/LayoutTests”和“src/third_party/WebKit/LayoutTests”的源代码是从srcwebkitorg签出来的,但是这个网站目前存在问题无法签出代码, 需要屏蔽掉这2个目录,由于里面是测试代码,即使丢弃也不会影响整个工程的编译,方法是打开trunk下面的gclient文件,向里面添加如下内容

"custom_deps" : {

"src/webkit/data/layout_tests/LayoutTests":None,

"src/third_party/WebKit/LayoutTests":None肠川惯缎甙等轨劝憨滑,

},

这样svn就能完成代码的同步了。最后gclient会调用depot_tools/python_bin/pythonexe 对 src/build/gyp_

chromium进行处理,这样就得到了所有的sln和vcproject文件。

2,如果是下载的代码压缩包或者checkout的代码,代码目录里面没有sln文件,这个时候需要调用命令行进入源代码根目录,然后执行命令 gclient runhooks --force,命令执行后会直接对Chromegyp进行解析,生成sln文件。

在实际下载过程中,最开始的时候我用TortoiseSVN从trunk/src checkout源代码,但是得到的代码只有几百兆,执行gclient runhooks --force命令后也没有找到sln文件,具体原因未知,不建议使用此方式。而直接下载代码压缩包的方式没有尝试过,不知道是否可行。因此最稳妥的方法还是使用depot_tools来部署和处理源代码。

三 编译工程

启动Visual Studio 2005打开 src/chrome/browser/chromesln,或者打开src/build/allsln,如果打开的是chromesln里面包含480个工程,而allsln则包含507个工程,一些09年的编译说明提到有300左右的工程,可见chrome的代码变动比较大。对整个解决方案进行编译,打开需要2个小时才能完成编译,视硬件环境而定,内存越大越快,推荐4G以上内存,酷睿2核或者4核。编译完成以后据说会占用30G的空间。编译后的文件位于 d:/chorme/chrome/debug 目录或者 d:/chorme/chrome/release目录下。

四 chrome涉及的开源项目

Chrome 采用了很多开源项目,这里把它们列出来以备后用,目前Chrome涉及25个开源代码:

1、Google Breakpad

/src/breakpad

开源的跨开台程序崩溃报告系统。

2、Google URL

/src/googleurl

Google小巧的URL解析整理库。

3、Skia

/src/skia

矢量图引擎。

4、Google v8

/src/v8

Google开源的JavaScript引擎。V8实现了ECMA-262第三版的ECMAScript规范,可运行于Windows XP 和 Vista, Mac OS X 105 (Leopard), 及 Linux等基于IA-32 或 ARM 的系统之上。V8可单独运行也可嵌入到任何C++程序中。

5、Webkit

/src/webki

开源的浏览器引擎

6、Netscape Portable Runtime (NSPR)

/src/base/third_party/nspr

Netscape Portable Runtime (NSPR) 提供了系统级平台无关的API及类似libc的函数。

7、Network Security Services (NSS)

/src/base/third_party/nss

Network Security Services (NSS) 一套用于支持服务器端与客户端安全开发的跨平台函数库。程序通过NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X509 v3 认证及其它一些安全标准。

8、Hunspell

/src/chrome/third_party/hunspell

Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding

9、Windows Template Library

/src/chrome/third_party/wtl

用于开发Windows程序与UI组件的C++ library。WTL扩展了ATL (Active Template Library) 并提供一套用于controls, dialogs, frame windows, GDI objects等开发的类。

10、Google C++ Testing Framework

/src/testing/gtest

Google用于编写C++测试的基于xUnit架构的框架,可用于多种平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自动测试发现,有一套丰富的Assertions断言,用于可自定义断言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation

11、bsdiff 与 bspatch

/src/third_party/bsdiff 及 /src/third_party/bspatch

bsdiff 与 bspatch 用于为二进制文件生成补丁。

12、bzip2

/src/third_party/bzip2

bzip2使用Burrows-Wheeler block sorting text compression 算法与Huffman编码压缩文件。

13、International Components for Unicode (ICU)

/src/third_party/icu38

ICU是一套成熟并被广泛使用的C/C++ 及 Java 库,可为软件提供Unicode与全球化支持。

14、libjpeg

/src/third_party/libjpeg

用于处理JPEG (JFIF)图像格式的库。

15、libpng

/src/third_party/libpng

PNG图像格式库。支持绝大部分的PNG特性,可扩展。已经被广泛地使用了13年以上了。

16、libxml

/src/third_party/libxml

C语言的XML解析库。

17、libxslt

/src/third_party/libxslt

C语言的XSLT库。

18、LZMA

/src/third_party/lzma_sdk

LZMA为7-Zip软件中7z格式压缩所使用的压缩算法,有很好的压缩效果。

19、stringencoders

/src/third_party/modp_b64

一系列高性能的c-string转换函数,比如:base 64 encoding/decoding。通常比其标准实现快两倍以上。

20、Netscape Plugin Application Programming Interface (NPAPI)

/src/third_party/npapi

多种浏览器使用的跨平台插件架构。

21、Pthreads-w32

/src/third_party/pthread

用于编写多线程程序的API

22、SCons - a software construction tool

/src/third_party/scons

开源的软件构建工具——下一代的编译工具。可以认为SCons是改进过的跨平台配上autoconf/automake与ccache的Make工具的子系统。

23、sqlite

/src/third_party/sqlite

大名鼎鼎的嵌入式数据库引擎。自管理、零配置、无需服务器、支持事务。

24、TLS Lite

/src/third_party/tlslite

SSL 30, TLS 10, and TLS 11的Python免费实现库。TLS Lite支持这些安全验证方式:SRP, shared keys, and cryptoIDs in addition to X509 certificates。注:Chrome并不包涵Python。TLS Lite用于Chrome开发过程中的代码覆盖、依赖检查、网页加载时间测试及生成html结果比较等。

25、zlib

/src/third_party/zlib

zlib为一套用于任意平台与机器的无损数据压缩的库,它免费、自由、无任何法律专利问题。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何在windows下编译Chrome源代码

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情