使用CEF(一)— 起步


使用CEF(一)— 起步

介紹

Chromium Embedded Framework (CEF)是個基於Google Chromium項目的開源Web browser控件,支持Windows, Linux, Mac平台。除了提供C/C++接口外,也有其他語言的移植版。

因為基於Chromium,所以CEF支持Webkit & Chrome中實現的HTML5的特性,並且在性能上面,也比較接近Chrome。

CEF架構

Chromium架構文檔

libcef_dll_wrapper

在網上,大多數所謂編譯CEF的教程,實際上只是編譯針對CEF源碼的C++包裝庫:libcef_dll_wrapper,並不是真正的編譯CEF。libcef動態鏈接庫導出 C API 使得使用者不用關心CEF運行庫和基礎代碼。libcef_dll_wrapper 工程把 C API 封裝成 C++ API同時包含在客戶端應用程序工程中。C/C++ API的轉換層代碼是由轉換工具自動生成。實際上,想要編譯CEF源碼是一件非常麻煩的事情,你需要梯子、良好的網速以及不錯的電腦。回歸正題,我們開始編譯libcef_dll_wrapper。

編譯前准備

cmake:https://cmake.org/download/

vs2019:https://visualstudio.microsoft.com/zh-hans/vs/

CEF以及Wrapper源碼:https://cef-builds.spotifycdn.com/index.html

下載libcef以及wrapper

我們首先從CDN上下載ceflib靜態庫以及wrapper源碼:Windows64bit,標准分發(Standard Distribution)。

下載完成后,我們解壓到工作目錄下:

在這個目錄下,會看到很多的文件夾和目錄。其中主要的幾個文件夾:

  • cmake:該目錄下存放了配置和構建以Windows作為編譯環境的cmake配置文件,具體內容可以自行查看。

  • Debug和Release:這兩個文件夾中,打開會看到已經編譯好的CEF核心庫文件:

  • include:libcef本身提供的頭文件以及wrapper會使用到的頭文件。

  • libcef_dll:存放了libcef_dll_wrapper源碼。

  • Resources:CEF作為內核的瀏覽器運行時需要用到的資源文件。

  • tests:存放了利用libcef、以及wrapper作為庫來編寫的瀏覽器Demo。其中,cefsimple編譯出來的是一個簡單的瀏覽器,而cefclient編譯出來的是一個展示了cef許多API功能的exe。

使用cmake進行配置構建

打開cmake-gui.exe程序,在Where is the source code欄中選擇源碼所在目錄,在下方的Where to build the binaries欄目中我們可以自定義任意位置,但是為了方便管理,我們選擇在源碼所在目錄下增加一個build文件夾,所以綜合來看,當前cmake-gui的配置為:

接下來我們直接點擊下方的Configure按鈕,cmake-gui會彈框提示沒有build文件夾,會幫助你ui創建一個build文件夾,以及讓你選擇構建工具:

完成配置后,我們進行cmake的生成操作(Generate),並打開該解決方案:

編譯libcef_dll_wrapper

上述使用cmake配置構建后,在Windows下,我們得到了一個解決方案:cef.sln。使用vs2019打開后,我們會看到解決方案中已經存在了幾個工程:

  • ALL_BUILD與ZERO_CHECK:是cmake自動生成的輔助工程。
  • cef_gtest與ceftests:都是測試模塊,這里不關心。
  • cefclient:一個包含CEF各種API演示的瀏覽器程序Demo。
  • cefsimple:一個簡單的CEF瀏覽器程序Demo。
  • libcef_dll_wrapper:對libcef庫的C++代碼封裝。上述cefclient與cefsimple都會用它。

我們首先完成libcef_dll_wrapper的編譯,然后對cefclient以及cefsimple完成編譯。

2>libcef_dll_wrapper.vcxproj -> D:\Projects\cef\cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64\build\libcef_dll_wrapper\Debug\libcef_dll_wrapper.lib
========== Build: 2 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
1>   Creating library D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefsimple/Debug/cefsimple.lib and object D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefsimple/Debug/cefsimple.exp
1>cefsimple.vcxproj -> D:\Projects\cef\cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64\build\tests\cefsimple\Debug\cefsimple.exe
1>Adding manifest...
========== Build: 1 succeeded, 0 failed, 2 up-to-date, 0 skipped ==========
1>   Creating library D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefclient/Debug/cefclient.lib and object D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefclient/Debug/cefclient.exp
1>cefclient.vcxproj -> D:\Projects\cef\cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64\build\tests\cefclient\Debug\cefclient.exe
1>Adding manifest...
========== Build: 1 succeeded, 0 failed, 2 up-to-date, 0 skipped ==========

完成了編譯以后,我們可以直接進入cefclient或者是cefsimple里面的輸出中運行對應的瀏覽器程序:

注意,cefsimple.exe打開白屏是因為demo代碼中默認訪問的Google,cefclient.exe其實默認也訪問的Google,但是因為可以輸入任意的地址,所以這里不太容易發現。

cefsimple中的默認訪問地址修改為國內即可(cefclient中的自行搜索):

下一節,將從零開始,使用cef來編寫一個簡單Demo。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM