轉載自: http://www.cnblogs.com/himax/p/how_to_build_cef3_on_windows.html
一、什麼是CEF
CEF即Chromium Embeded Framework,由谷歌的開源瀏覽器項目Chromium擴展而來,可方便地嵌入其它程序中以得到瀏覽器功能。
CEF包括CEF1和CEF3兩個版本,CEF1已停止更新。由於CEF只支持C、C++,所以出現了很多第三方項目來提供其它語言的支持。
.NET 的包裝類庫有chromiumfx、cefglue、cefsharp,其它語言參看https://bitbucket.org/chromiumembedded/cef#markdown-header-external-projects 。
CEF版本號說明:3.2357.1281.gd660177 -> CEF版本號.Branch.Patch.Hash
二、爲何要編譯CEF
在使用chromiumfx+cef過程中發現不支持主流的mp3、mp4格式,經過搜索發現因爲這些格式不是開放格式,出於版權的考慮在chromium編譯配置中去掉了對這些格式的支持。要添加支持必須修改編譯的配置參數。網上流傳的通過複製chrome目錄下ffmpeg.dll替換的方式經過實踐並沒有成功,於是決定動手編譯。
三、編譯先決條件
1.快速穩定的VPN (不但要fq而且要穩定。下載webkit時候單個文件4G+,一旦失敗則需要重新下載
2.64位操作系統,win7+
3.硬盤空間40G+,內存4G+
4.大量的時間 (下載五六個小時,編譯兩三個小時
5.vs2013 update4、win8.1 SDK (Express不行,update5+未測試
四、編譯過程
1.升級vs13至update4,安裝Microsoft Foundation Classes for C++(MFC庫,可運行vs安裝包安裝),安裝win8.1 SDK。
2.設置系統區域爲英語(美國)。(控制面板-區域-管理-更改系統區域設置-英語(美國)
3.添加環境變量
DEPOT_TOOLS_WIN_TOOLCHAIN=0
GYP_GENERATORS=ninja,msvs-ninja
GYP_MSVS_VERSION=2013
4.創建工作目錄,儘量簡單,不帶空格特殊字符。例:e:\ws
5.下載解壓工具包解壓至工作目錄,並添加到系統環境變量Path末尾。例:e:\ws\depot_tools
下載:depot_tools (原頁面
6.下載編譯腳本至工作目錄
7.工作目錄下建立源碼目錄。例:e:\ws\source
8.以管理員身份運行cmd,切換至工作目錄,運行gclient
1 e: 2 cd e:\ws 3 gclient
等待安裝python和git,大約五六分鐘。
9.繼續執行
python automate-git.py
根據提示選擇合適配置參數
--download-dir 源碼下載目錄
--depot-tools-dir 工具包目錄
--branch 源碼分支(默認trunk主分支
--checkout 指定patch版本(默認最近提交 如何確定checkout下文介紹
--no-build 下載完不自動開始編譯(我們需要修改編譯配置
--no-update 確定源碼下載完畢僅重新編譯時使用
--force-build 強制編譯(發現在有成功編譯的時候再編譯不會執行,可以加上這個
--no-debug-build 只編譯release版本
--no-release-build 只編譯debug版本
python automate-git.py --download-dir=e:\ws\source --depot-tools-dir=e:\ws\depot_tools --branch=2357 --checkout=d66017718b0f0d44da42b706c3c2aa5c0c103852 --no-build
10.等待下載完成。睡上一覺,或盯着屏幕六小時。
五、如何確定--checkout值
如果確定需要分支下的最新版本,請略過此節。
1.從http://cefbuilds.com/檢查目標版本的hash值。例:3.2357.1281.gd660177中的gd660177
2.從https://bitbucket.org/chromiumembedded/cef/branches/進入目標分支。例:2357
3.在Commits中檢索目標hash,注意版本號中hash爲8位,commits中爲7位,可以忽略第一位搜索。例:gd660177->d660177
4.點擊相應commit,即可在地址欄中得到checkout值。例:d66017718b0f0d44da42b706c3c2aa5c0c103852
六、修改編譯配置
1.打開e:\ws\source\chromium\src\cef\cef.gypi,variables節下添加如下即可支持mp3。
'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',
同時可參考http://blog.csdn.net/chromium_webkit/article/details/8575629加入更多格式支持。
從Chromium的源碼third_party\ffmpeg\chromium\config\Chrome\linux\ia32\config.h可以得知Chrome採用的FFmpeg的配置選項,在原有的配置選項後面添加如下選項:
--enable-decoder='rv10,rv20,rv30,rv40,cook,h263,h263i,mpeg4,msmpeg4v1,msmpeg4v2,msmpeg4v3,amrnb,amrwb,ac3,flv' --enable-demuxer='rm,mpegvideo,avi,avisynth,h263,aac,amr,ac3,flv,mpegts,mpegtsraw' --enable-parser='mpegvideo,rv30,rv40,h263,mpeg4video,ac3'
2.打開相同目錄下cef.gyp,根據以下內容替換(--爲待替換,++爲替換後,其實這是一個patch文件,不知道如何用只好手動替換一下 新版本可能已包含了此patch)
@@ -7,7 +7,7 @@ 'pkg-config': 'pkg-config', 'chromium_code': 1, 'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/cef', - 'about_credits_file': '<(SHARED_INTERMEDIATE_DIR)/about_credits.html', + 'cef_about_credits_file': '<(SHARED_INTERMEDIATE_DIR)/cef_about_credits.html', 'framework_name': 'Chromium Embedded Framework', 'revision': '<!(python tools/revision.py)', 'chrome_version': '<!(python ../build/util/version.py -f ../chrome/VERSION -t "@MAJOR@.@MINOR@.@BUILD@.@PATCH@")', @@ -659,26 +659,26 @@ ], }, { - 'target_name': 'about_credits', + 'target_name': 'cef_about_credits', 'type': 'none', 'actions': [ { 'variables': { 'generator_path': '../tools/licenses.py', }, - 'action_name': 'generate_about_credits', + 'action_name': 'cef_generate_about_credits', 'inputs': [ # TODO(phajdan.jr): make licenses.py print inputs too. '<(generator_path)', ], 'outputs': [ - '<(about_credits_file)', + '<(cef_about_credits_file)', ], 'hard_dependency': 1, 'action': ['python', '<(generator_path)', 'credits', - '<(about_credits_file)', + '<(cef_about_credits_file)', ], 'message': 'Generating about:credits.', }, @@ -689,7 +689,7 @@ 'target_name': 'cef_resources', 'type': 'none', 'dependencies': [ - 'about_credits', + 'cef_about_credits', ], 'actions': [ { @@ -697,7 +697,7 @@ 'variables': { 'grit_grd_file': 'libcef/resources/cef_resources.grd', 'grit_additional_defines': [ - '-E', 'about_credits_file=<(about_credits_file)', + '-E', 'about_credits_file=<(cef_about_credits_file)', ], }, 'includes': [ '../build/grit_action.gypi' ],
七、開始編譯生成
python automate-git.py --download-dir=e:\ws\source --depot-tools-dir=e:\ws\depot_tools --branch=2357 --checkout=d66017718b0f0d44da42b706c3c2aa5c0c103852 --no-debug-build --force-build
等待兩三個小時即可編譯完成,偶然出錯退出則加入--no-update重新執行,會繼續上次的生成。
八、參考資料
https://bitbucket.org/chromiumfx/chromiumfx/overview
https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md#markdown-header-automated-method
https://github.com/cefsharp/cef-binary/wiki/Building-Cef-from-source
http://cefbuilds.com/
http://blog.csdn.net/chromium_webkit/article/details/8575629