标签:
转自:http://blog.csdn.net/kuerjinjin/article/details/23563059
从12年那会儿开始获取源码和构建chromium项目都是按照那时候的官方要求用win7+vs2010,相对来说也比较简单,按照步骤来也很快能编译出来。
1.官网的编译配置介绍:http://www.chromium.org/developers/how-tos/build-instructions-windows
2.编译需要的工具:vs2010/sp1,win8sdk,DXSDK,depot_tools
我用的工具都是在这里了:2010CompilerToolsForChrome
depot_tools也可以从官方获取:depot_tools (命令行下执行 gclient 它会自动下载安装构建项目解决方案所需要的工具 python, git 和 svn ),下载下来之后找个地方解压出来,比如我是解压到E:盘下。
-------------------------------------------------------------------------------------------------------------------
在这里再说一下几个问题:
1.是使用VS10和VS13编译项目的一些区别:如果是用的33之前的版本源码生成的10的解决方案,那么vs2010/sp1,win8sdk,DXSDK,depot_tools这些都需要有的,如果是用的最近的源码,只需要弄好最新版的depot_tools,再安装个13就一切OK!(其实使用ninja+vs13混合编译最终调用的vs13是depot_tools下的那个,而我们要再安装个VS13不过是修改和查看代码用而已)运行那个批处理设置一下直接用就行了!
2.一般的设置我们可以放在批处理中设置好,让ninja知道我们要用的vs13,win8sdk等在我们下载好的depot_tools中!在src的同级目录(或者说就是那个.gclient所在的目录)新建一个批处理CreateBuild.bat 运行这个批处理文件可能会比较慢,耐心等待命令行窗口退出后再打开chrome.sln开始编译!批处理的内容如下:
@echo off
for /f %%a in (‘where gclient.bat‘) do set pwd=%%a
set pwd=%pwd:~0,-11%
set file=%pwd%win_toolchain\data.json
set pwd=%pwd:\=\\%
echo {"runtime_dirs": ["%pwd%win_toolchain\\vs2013_files\\sys64", "%pwd%win_toolchain\\vs2013_files\\sys32"], "path": "%pwd%win_toolchain\\vs2013_files", "version": "2013e", "wdk": "%pwd%win_toolchain\\vs2013_files\\wdk", "win8sdk": "%pwd%win_toolchain\\vs2013_files\\win8sdk"} > %file%
set DEPOT_TOOLS_WIN_TOOLCHAIN=1
set GYP_MSVS_VERSION=2013
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=component=shared_library disable_nacl=1
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyCV9AOzytWwWCtNE8f7ZV56fP1u9yWwhVU‘ -Dgoogle_default_client_id=‘1039996407057.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘mLT8XooDODav1OJG5G3bY61d‘
这里要说一下,很多朋友是从网上其他地方下载的别人用的源码包,可能他们的源码包是用的本地环境,而我们使用的混合编译,需要设置set DEPOT_TOOLS_WIN_TOOLCHAIN=1,设置为0则是让gclient不要自动去构造环境,而是利用本机现有环境!很明显的区别从打开的chrome.sln项目解决方案就能看出来,混合编译的是没有分类的虚拟文件夹的,但是设置为0的话就是用系统现有环境生成的也就是编译使用你自己安装的VS是有虚拟文件夹的,这个跟之前的10版本以前的都一样!
GYP_MSVS_VERSION很明显就不说了,GYP_GENERATORS配置编译方式的,GYP_DEFINES一般是配置win8sdk位置的,如:set GYP_DEFINES=windows_sdk_path="C:\Program Files (x86)\Windows Kits\8.0"
如果你不知道这个批处理有没有成功执行,你也看一下src\out\Debug(或者Release)下的build.ninja文件,看看开始那两个路径是不是就是你在path里设置的depot_tools所在的路径。如果不是,而是原本的系统路径下的,那么就是没有成功执行。建议在cmd下执行批处理看看提示的错误是什么!
3.在最终的Release版本产品发布的时候,为了打包的需要可以把shared_library注释掉rem set GYP_DEFINES=component=shared_library改为静态编译,这个时候的编译会比较慢特别是是最后的连接chrome.dll !
4.由于ninja+vs13这种混合编译模式调用的都是depot_tools下的,所以直接在打开vs13中添加文件是不会被编译到的,所以如果有在项目中添加文件就需要修改项目对应的gyp或者gypi文件,将我们添加的文件目录添加到sources节点下,然后重新运行上边的批处理文件!
5.最后再说一点,那就是如果以前使用过vs2010编译,在运行CreateBuild.bat 这个批处理之前要删除“C:\Users\$(username)\AppData\Local\Microsoft\MSBuild\v4.0”下props文件中关于$(DXSDK_DIR)的内容。(重要)
6.最近有网友说新版本的chromium编译总有些警告导致编译不过,后来我们发现暂时可以这样解决:在src\build\common.gypi 的msvs_disabled_warnings 节点里大约5325行左右,加上 4819,4996 排除两个警告就能正常编译通过!
7.对于想编译64位chromium的同学,需要在批处理里面另外加一句命令:set GYP_DEFINES=target_arch=x64 不过输出的是在Release_x64 或者Debug_x64下!
8.项目编译成功后有人问那个谷歌API KEY信息栏提示的问题!很多人的做法是直接将提示这段信息栏的代码注释掉,个人觉得这么做并不太妥当!其实你点右侧的那个连接也能看到怎么做,不过文章有点儿旧了。总的来说差不多也就这两种方式:第一种就是在生成项目解决方案的时候直接加参数,比如:python src\build\gyp_chromium -Dgoogle_api_key=‘******‘ -Dgoogle_default_client_id=‘******** -Dgoogle_default_client_secret=‘******‘而第二种方式就是我们在src\build\common.gypi中942行左右的‘google_api_key%‘,‘google_default_client_id%‘,‘google_default_client_secret%‘三个参数中直接添加也行,效果是一样的!至于这些KEY值怎么获得?这个自己去申请就行!如果你实在懒得去申请,也可以用我提供的下边这几个测试一下:
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyCV9AOzytWwWCtNE8f7ZV56fP1u9yWwhVU‘ -Dgoogle_default_client_id=‘1039996407057.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘mLT8XooDODav1OJG5G3bY61d‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyCWBmUuxZW1VaZZHkIembF2nengp8asUEk‘ -Dgoogle_default_client_id=‘1038894449561-bjihbnffo05svbqcncq7clirvq9meh0c.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘OeKyUMzNTZ1-hPPypa7GiW4x‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyBsp9n41JLW8jCokwn7vhoaMejDFRd1mp8‘ -Dgoogle_default_client_id=‘996322985003.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘IR1za9-1VK0zZ0f_O8MVFicn‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyCcjKzcifha1m8P4RVxytpVsx3wNDIEHsY‘ -Dgoogle_default_client_id=‘985919302268.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘vQKKl73QQk8_dgEF44vNTHmJ‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyBhWJ-j5RXyt5911BMuVen-WuS10mvOnrY‘ -Dgoogle_default_client_id=‘952820686433-mbp5sv9scfj78siq96jlvrem47qgvbi3.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘XU4b-j0Ssy-XkTvSVmiFMvNY‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k‘ -Dgoogle_default_client_id=‘811574891467.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘kdloedMFGdGla2P1zacGjAQh‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw‘ -Dgoogle_default_client_id=‘77185425430.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘OTJgUOQcT7lO7GsGZq2G4IlT‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyD1tTgDbP-N6BGXKZ7VqSos_IU1QflGbyg‘ -Dgoogle_default_client_id=‘724288223830.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘rHmKOPygcI6G-clFHb-RfuHb‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyAQfxPJiounkhOjODEO5ZieffeBv6yft2Q‘ -Dgoogle_default_client_id=‘424119844901.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘AIienwDlGIIsHoKnNHmWGXyJ‘
python src\build\gyp_chromium -Dgoogle_api_key=‘AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM‘ -Dgoogle_default_client_id=‘413772536636.apps.googleusercontent.com‘ -Dgoogle_default_client_secret=‘0ZChLK6AxeA3Isu96MkwqDR4‘
9.看评论里有朋友提到了NACL这块,个人建议在编译的时候最好是把这块的编译设置关掉(国内其他的定制浏览器也是这么干的)。这块应该是还不太成熟,应用也很少!所以建议在配置编译项的时候做一下修改
11.看评论里有朋友问这个chromium的优化问题,那么设置 set GYP_DEFINES=branding=Chromium buildtype=Official 以官方的构建方式来做会更好一些!官方的建立方式启用了许多优化,例如:/Os(大小优化) ;禁用一些跟踪 ;启用PGO和LTCG ;去掉DLOG ;去掉CHECK消息;启用其他的编译/链接时优化等等~
12.再一个就是很多朋友看了common.gypi的配置后也跟着乱改配置项,比如fastbuild=1等;关于component=shared_library和fastbuild=1的区别建议大家看一下这篇文章再做修改!
13.很长时间没来看看了,发现又积攒了很多很多问题,比如有人提到的这个‘ascii’的问题,具体错误提示如:UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xce in position 9: ordinal not in range(128)!这个问题在谷歌使用python27的时候(差不多是chromium31左右)就出现了,基本我们的解决办法就是直接根据错误提示找到depot_tools\python276_bin\Lib\mimetypes.py文件,大约在249行左右注释掉这几行代码就是了!
当然,官方也给出了一种方法:set your Windows system locale to English!详细介绍见
14.另一个不得不提的问题就是如果你在下载编译最新几个版本的代码比如40,41,42,43等,最好是设置set DEPOT_TOOLS_WIN_TOOLCHAIN=0,并下载安装最新的VS2013的更新包Update4(You must build with Visual Studio 2013 Update 4, no other versions are supported.)要不然很可能会编译不过;至于为什么,我来说一下这个问题是因为之前的chromium编译我们使用混合编译用的是win_toolchain下的免费版VS13,这个版本比较早是存在很多BUG的,很多在chrome论坛里提交的BUG都是指向VS13,就比如我们设置 set GYP_DEFINES=branding=Chromium buildtype=Official 编译Release版本使用混合编译基本是编译不过的。VS13 update4里面就这些问题提交了修复,所以后期的代码构建谷歌都是推荐使用VS13 Update4(Community版或者Professional版)。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
另外针对国内拉取chromium代码很麻烦的问题,除了可以直接下载网友共享的源码包之外,或者可以使用另一条方式就是设置http代理!这里提供一个方法供朋友们测试:
#配置http代理:(gclient 的 python脚本里的urllib2和其他几个对象默认使用http代理)
set http_proxy=http://127.0.0.1:808(这里根据情况自己改,下同)
#如果http代理需要认证,那么要加上一下两个命令
set http_proxy_user=<你的用户名>
set http_proxy_pass=<你的密码>
#配置winhttp代理,cscript 走代理
netsh winhttp set proxy 127.0.0.1:808
#配置gclient的git走http代理
git config --global http.proxy http://127.0.0.1:8080
#从代码库拿chromium
fetch --nohooks --no-history chromium --nosvn=True
gclient sync --force --nohooks
代码同步完成后再使用那个批处理生成解决方案就OK! 至于VPN的话可以试试我上边推荐的那个!
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
待续......
谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)
标签:
原文地址:http://www.cnblogs.com/x_wukong/p/4819962.html