CEF开发环境搭建

本文主要记录windows平台搭建cef开发环境的过程。

前置条件

  • Windows 操作系统
  • vs studio / vscode
  • cmake

CEF 源码下载

通过github 的cef找到下载预编译好的cef链接:https://cef-builds.spotifycdn.com/index.html

找到对应的操作系统及cpu架构的tab页, 笔者选择的是Windows 64-bit, 然后在Current Stable Build > Standard Distribution下载对应的压缩包。

这个包预编译了大部分所需库,分别在Debug/Release目录中, 包括:

  • libcef.dll
  • cef_sandbox.lib
  • ...
    还包含编译libcef_dll_wrapper所需的源码及sample

libcef_dll_wrapper 编译

打开cmake-gui, 选择源码目录, 选择生成目录。 configure > generate > open project 然后编译。

开发环境配置

接下来描述的开发环境配置仅适用于cmake项目

  1. 将预编译好的库复制出来, 包括目录为

    • Debug
    • Release
      • cef_sandbox.lib
      • chrome_elf.dll
      • d3dcompiler_47.dll
      • dxcompiler.dll
      • dxil.dll
      • libcef.dll
      • libcef.lib
      • libcef_dll_wrapper.lib
      • libcef_dll_wrapper.pdb
      • libEGL.dll
      • libGLESv2.dll
      • snapshot_blob.bin
      • v8_context_snapshot.bin
      • vk_swiftshader.dll
      • vk_swiftshader_icd.json
      • vulkan-1.dll
    • Resources
  2. 将cmake、include目录复制出来, cmake目录包含如下文件:

    • cef_macros.cmake
    • cef_variables.cmake
    • FindCEF.cmake
  3. 在cmake目录中新增cef_dll_wrapper.cmake文件:

     set(CEF_CEFWRAPPER_LIB_DEBUG "${CEF_BINARY_DIR_DEBUG}/libcef_dll_wrapper.lib")
     set(CEF_CEFWRAPPER_LIB_RELEASE "${CEF_BINARY_DIR_RELEASE}/libcef_dll_wrapper.lib")
    
    
     ADD_LOGICAL_TARGET("libcef_dll_wrapper" "${CEF_CEFWRAPPER_LIB_DEBUG}" "${CEF_CEFWRAPPER_LIB_RELEASE}")
     ADD_LOGICAL_TARGET("libcef_lib" "${CEF_LIB_DEBUG}" "${CEF_LIB_RELEASE}")
    
     if(USE_SANDBOX)
         # Logical target used to link the cef_sandbox library.
         ADD_LOGICAL_TARGET("cef_sandbox_lib" "${CEF_SANDBOX_LIB_DEBUG}" "${CEF_SANDBOX_LIB_RELEASE}")
     endif()
    

    ADD_LOGICAL_TARGET定义在cef_macros.cmake中, 主要用于添加一个imported项目。
    USE_SANDBOX定义在cef_variables.cmake中, 主要确定是否开启沙箱,如果开启, 将会激活CEF_USE_SANDBOX宏定义,此宏直接影响示例代码中关于沙箱的设置。USE_SANDBOX同时会影响与沙箱相关的library。

  4. 修改FindCEF.cmake, 在文件前头添加get_filename_component(CEF_ROOT ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)用于动态确定环境位置。在末尾添加include("cef_dll_wrapper") 用于包含cef_dll_wrapper相关环境

  5. 完成

项目配置示例

find_package(CEF MODULE REQUIRED)

add_executable (mytarget WIN32 ${SOURCEFILES})
set(CEF_TARGET_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
SET_EXECUTABLE_TARGET_PROPERTIES(mytarget)


target_compile_definitions(mytarget PRIVATE   UNICODE _UNICODE _WINDOWS)
target_link_options(mytarget PRIVATE
    /ENTRY:wWinMainCRTStartup
)


target_link_libraries(mytarget libcef_lib libcef_dll_wrapper ${CEF_STANDARD_LIBS} ${CEF_SANDBOX_STANDARD_LIBS})
if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET mytarget PROPERTY CXX_STANDARD 20)
endif()


if(USE_SANDBOX)
    # Logical target used to link the cef_sandbox library.
    target_link_libraries(mytarget cef_sandbox_lib )
endif()

# Add the custom manifest files to the executable.
ADD_WINDOWS_MANIFEST("${CMAKE_CURRENT_SOURCE_DIR}/winres" "mytarget" "exe")


# Copy binary and resource files to the target output directory.
COPY_FILES("mytarget" "${CEF_BINARY_FILES}" "${CEF_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
COPY_FILES("mytarget" "${CEF_RESOURCE_FILES}" "${CEF_RESOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")

关键配置

  1. find_package(CEF MODULE REQUIRED)

  2. set(CEF_TARGET_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")

    这个设置主要是因为ADD_WINDOWS_MANIFEST这个宏中用到了CEF_TARGET_OUT_DIR

  3. SET_EXECUTABLE_TARGET_PROPERTIES(mytarget) 主要用于设置必要的编译链接选项

  4. 必要依赖的环境libcef_lib libcef_dll_wrapper CEFSTANDARDLIBS{CEF_SANDBOX_STANDARD_LIBS}之所以需要CEF_SANDBOX_STANDARD_LIBS,是因为这个宏定义了Windows必要的依赖库, 特别是Delayimp.lib。 否则报链接错误。

  5. 其他没啥可提的了, COPY_FILES是必要的,方便调试运行。

posted @   汗牛充栋  阅读(218)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
历史上的今天:
2023-09-06 Python之断点续传下载及进度显示
点击右上角即可分享
微信分享提示