前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CEF源码构建及问题解决

CEF源码构建及问题解决

原创
作者头像
lealc
发布2024-10-11 20:58:54
380
发布2024-10-11 20:58:54
举报
文章被收录于专栏:Chromium学习

前言

主要记录一下Windows系统上构建cef的步骤,方便回顾使用

除了 master 分支之外,以下步骤通常可用于开发 CEF/Chromium 的最新版本分支。Chromium 的构建要求会随着时间的推移而变化,因此在尝试构建发布分支之前,请查看 BranchesAndBuilding Wiki 页面上列出的构建要求。然后只需添加到 automate-git.py 命令行中,其中“XXXX”是要构建的分支编号。

--branch=XXXX

相关资源

源码地址:chromiumembedded/cef

Project Page

Tutorial

General Usage

Master Build Quick-Start

Branches and Building

Announcements

Support Forum

Issue Tracker

C++ API Docs - Stable release docs / Beta release docs

Downloads - https://cef-builds.spotifycdn.com/index.html

Donations - http://www.magpcss.org/ceforum/donate.php

本地开发环境可以参考 https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart

如果需要自动化构建则可以参考:chromiumembedded / cef / wiki / AutomatedBuildSetup — Bitbucket

文件结构

所有平台都将使用相同的文件结构。“~”可以是不包含空格或特殊字符的任何路径。我们将在以下部分中为每个平台构建此目录结构。

代码语言:shell
复制
~/code/
  automate/
    automate-git.py   <-- CEF build script
  chromium_git/
    cef/              <-- CEF source checkout
    chromium/
      src/            <-- Chromium source checkout
    update.[bat|sh]   <-- Bootstrap script for automate-git.py
  depot_tools/        <-- Chromium build tools

使用此文件结构,您可以并排开发多个 CEF/Chromium 分支。例如,使用“chromium_git1”而不是“chromium_git”作为目录名称重复以下说明。

准备工作

版本要求:chromiumembedded / cef / wiki / BranchesAndBuilding — Bitbucket

软件要求:Win 10+ deployment, Win 10+ build system w/ VS2022 17.5+, Win 10.0.22621 SDK, Ninja

其他要求:

  • 安装默认位置中指定的确切 Windows SDK 版本,以避免生成问题。
  • 至少 16GB RAM(建议 32GB+)和 150GB 可用磁盘空间(用于调试版本)。
  • 使用快速互联网连接(100Mbps)和快速构建机器(2.4Ghz,16个逻辑内核,SSD)大约需要4小时。

下载安装

以下所有命令都应使用系统“cmd.exe”而不是 Cygwin shell 运行。

创建目录结构

运行以下命令创建对应的根目录

代码语言:shell
复制
D:\Code>mkdir CEF
D:\Code>cd CEF
D:\Code\CEF>mkdir automate
D:\Code\CEF>mkdir chromium_git

警告:如果您更改上述目录名称/位置,请确保(a)仅使用ASCII字符,并且(b)选择一个较短的文件路径(总长度不超过35个字符)。否则,由于无效或过长的文件路径,某些工具可能会在构建过程的后期失败。

下载Depot_Tools

下载依赖工具:Depot_Tools

解压到:D:\Code\depot_tools

请勿使用拖放或复制粘贴从资源管理器中提取,这样将无法提取必要的隐藏".git"文件夹,该文件夹对于depot_tools自动更新是必需的。您可以使用上下文菜单中的"全部提取..."选项。7-zip也是一个很好的工具来完成这个任务。

更新Depot_Tools

运行"update_depot_tools.bat"来安装Python和Git。

代码语言:shell
复制
cd c:\code\depot_tools
update_depot_tools.bat

增加环境变量

将"D:\Code\depot_tools"文件夹添加到系统的PATH环境变量中。例如,在Windows 10上:

  • 运行"SystemPropertiesAdvanced"命令。
  • 点击"环境变量..."按钮。
  • 双击"系统变量"下的"Path"以编辑其值。

下载Automate脚本

下载脚本:automate-git.py  到 “D:\Code\automate\automate-git.py”。

创建bat文件

创建名为"D:\Code\chromium_git\update.bat"的脚本,并将以下内容添加到其中:

代码语言:python
代码运行次数:0
复制
set GN_DEFINES=is_component_build=true use_thin_lto=false
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
python3 ..\automate\automate-git.py --download-dir=D:\Code\chromium_git --depot-tools-dir=D:\Code\depot_tools --no-distrib --no-build

运行bat文件

运行"update.bat"脚本,并等待CEF和Chromium源代码下载完成。CEF源代码将下载到"D:\Code\CEF\chromium_git\cef"目录,而Chromium源代码将下载到"D:\Code\CEF\chromium_git\chromium\src"目录。下载完成后,CEF源代码将被复制到"D:\Code\CEF\chromium_git\chromium\src\cef"目录中。

代码语言:shell
复制
cd D:\Code\CEF\chromium_git
update.bat

问题:chromium依赖库拉取失败

重新运行update.bat即可

生成cef项目

创建名为"D:\Code\CEF\chromium_git\chromium\src\cef\create.bat"的脚本,并将以下内容添加到其中:

代码语言:shell
复制
set GN_DEFINES=is_component_build=true use_thin_lto=false
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
call cef_create_projects.bat

运行create.bat脚本生成cef的项目

代码语言:shell
复制
cd D:\Code\CEF\chromium_git\chromium\src\cef
create.bat

这将生成一个"D:\Code\CEF\chromium_git\chromium\src\out\Debug_GN_x86\cef.sln"文件,可以在Visual Studio中加载该文件以进行调试和编译单个文件。如果要使用64位构建而不是32位构建,请在此路径中将“x86”替换为“x64”。始终使用Ninja来构建整个项目。如果更改项目配置或在GN配置(BUILD.gn文件)中添加/删除文件,请重复此步骤。

使用Ninja创建CEF/Chromium的Debug构建。在"c:\code\chromium_git\chromium\src\cef"处编辑CEF源代码,并多次重复此步骤以进行增量构建。

代码语言:shell
复制
cd c:\code\chromium_git\chromium\src 
autoninja -C out\Debug_GN_x86 cef

将"Debug"替换为"Relea将"Debug"替换为"Release"以生成Release构建而不是Debug构建。将“x86”替换为“x64”以生成64位构建而不是32位构建。se"以生成Release构建而不是Debug构建。将“x86”替换为“x64”以生成64位构建而不是32位构建。

运行示例

运行生成的cefclient示例应用程序。

发布包构建

构建“调试”和“发布”配置后,可以使用make_distrib工具(在 Windows 上.bat,在 macOS 和 Linux 上.sh)创建二进制发行版。

代码语言:shell
复制
cd /path/to/chromium/src/cef/tools
./make_distrib.sh --ninja-build

or

make_distrib.bat --ninja-build

如果该过程成功,将在 /path/to/chromium/src/cef/binary_distrib 目录中创建一个二进制分发包。

cef_binary_124.0.0-master.2940+gdca0435+chromium-124.0.6367.0_windows32

有关其他使用选项,请参阅 make_distrib.py 脚本。

然后可以使用 CMake 和平台工具链构建生成的二进制发行版。有关详细信息,请参阅二进制发行版附带的 README.txt 文件。

error : ERROR: Failed to find vcvars

涉及到vs相关环境问题,找到对应脚本:D:\Code\CEF\chromium_git\chromium\src\cef\tools\msvs_env.bat

相关issue:Manual Packaging failed on Windows. ERROR: Failed to find vcvars · Issue #3551 · chromiumembedded/cef (github.com)

对应代码逻辑:

代码语言:shell
复制
echo "1: %1"
:: Require that platform is passed as the first argument.
if "%1" == "win32" (
  set vcvarsbat=vcvars32.bat
) else if "%1" == "win64" (
  set vcvarsbat=vcvars64.bat
) else if "%1" == "winarm64" (
  set vcvarsbat=vcvarsamd64_arm64.bat
) else (
  echo ERROR: Please specify a target platform: win32, win64 or winarm64
  set ERRORLEVEL=1
  goto end
)

:: Check if vcvars is already provided via the environment.
set vcvars="%CEF_VCVARS%"
echo "2: %vcvars%"
if %vcvars% == "none" goto found_vcvars
if exist %vcvars% goto found_vcvars
echo "3: search"
:: Search for the default VS installation path.
for %%x in (2022) do (
  for %%y in ("%PROGRAMFILES%" "%PROGRAMFILES(X86)%") do (
    for %%z in (Professional Enterprise Community BuildTools) do (
      set vcvars="%%~y\Microsoft Visual Studio\%%x\%%z\VC\Auxiliary\Build\%vcvarsbat%"
      if exist !vcvars! goto found_vcvars
    )
  )
)
echo "4: %vcvars%"
echo ERROR: Failed to find vcvars
set ERRORLEVEL=1
goto end

:found_vcvars
echo vcvars:
echo %vcvars%

推敲逻辑可以发现:

1、首先搜索是否配置有CEF_VCVARS这个环境变量,若有则直接取用此环境变量配置的路径

2、如果没有配置CEF_VCVARS环境变量,则对系统路径下的vs目录搜索

3、默认只支持"%PROGRAMFILES%" "%PROGRAMFILES(X86)%"和VS2022搜索

4、搜索路径为:"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars32.bat"

实际安装路径:D:\Software\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars32.bat

解决办法有两个:

1、新增CEF_VCVARS环境变量:set CEF_VCVARS=D:\Software\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvars32.bat

2、修改脚本,适配当前环境

代码语言:shell
复制
for %%x in (2022) do (
  for %%y in ("%PROGRAMFILES%" "%PROGRAMFILES(X86)%" "D:\Software") do (
    for %%z in (Professional Enterprise Community BuildTools) do (
      set vcvars="%%~y\Microsoft Visual Studio\%%x\%%z\VC\Auxiliary\Build\%vcvarsbat%"
      if exist !vcvars! goto found_vcvars
    )
  )
)

ERROR: Please install Doxygen from https://doxygen.nl/

下载链接:Doxygen download

也可以使用参数规避此问题:--no-docs

查看脚本:D:\Code\CEF\chromium_git\chromium\src\cef\tools\make_cppdocs.bat

代码语言:shell
复制
:: Check if DOXYGEN_EXE is already provided via the environment.
if exist "%DOXYGEN_EXE%" goto found_exe
set DOXYGEN_EXE="C:\Program Files\doxygen\bin\doxygen.exe"
if not exist %DOXYGEN_EXE% (
echo ERROR: Please install Doxygen from https://doxygen.nl/ 1>&2
set ERRORLEVEL=1
goto end
)

逻辑一目了然,设置环境变量即可

代码语言:shell
复制
set DOXYGEN_EXE="D:\Software\doxygen\bin\doxygen.exe"

RuntimeError: lib.exe exited with status 1107

链接失败:链接使用解决方案也就是sln生成的lib -- CEF Forum • make_distrib.bat fails 1107 - trying to merge libs (magpcss.org)

出现问题默认参数会构建sandbox,但是实际发布仅需client,使用如下命令行即可:

代码语言:shell
复制
make_distrib.bat --ninja-build --client

产物:D:\Code\CEF\chromium_git\chromium\src\cef\binary_distrib\cef_binary_124.0.0-HEAD.2941+g260dd0c+chromium-124.0.6367.0_windows32_client\Release

cef构建发布包的四种模式

四种模式分别通过参数“--minimal”、“--client”、“--sandbox”,若没有参数则默认standard模式,每种模式主要影响发布包包含内容。

minimal

client

sandbox

standard(默认)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 相关资源
  • 文件结构
  • 准备工作
  • 下载安装
    • 创建目录结构
      • 下载Depot_Tools
        • 更新Depot_Tools
          • 增加环境变量
            • 下载Automate脚本
              • 创建bat文件
                • 运行bat文件
                  • 问题:chromium依赖库拉取失败
                    • 生成cef项目
                      • 运行示例
                      • 发布包构建
                        • error : ERROR: Failed to find vcvars
                          • ERROR: Please install Doxygen from https://doxygen.nl/
                            • RuntimeError: lib.exe exited with status 1107
                              • cef构建发布包的四种模式
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档