主要记录一下Windows系统上构建cef的步骤,方便回顾使用
除了 master 分支之外,以下步骤通常可用于开发 CEF/Chromium 的最新版本分支。Chromium 的构建要求会随着时间的推移而变化,因此在尝试构建发布分支之前,请查看 BranchesAndBuilding Wiki 页面上列出的构建要求。然后只需添加到 automate-git.py 命令行中,其中“XXXX”是要构建的分支编号。
--branch=XXXX
源码地址:chromiumembedded/cef
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
所有平台都将使用相同的文件结构。“~”可以是不包含空格或特殊字符的任何路径。我们将在以下部分中为每个平台构建此目录结构。
~/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
其他要求:
以下所有命令都应使用系统“cmd.exe”而不是 Cygwin 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
解压到:D:\Code\depot_tools
请勿使用拖放或复制粘贴从资源管理器中提取,这样将无法提取必要的隐藏".git"文件夹,该文件夹对于depot_tools自动更新是必需的。您可以使用上下文菜单中的"全部提取..."选项。7-zip也是一个很好的工具来完成这个任务。
运行"update_depot_tools.bat"来安装Python和Git。
cd c:\code\depot_tools
update_depot_tools.bat
将"D:\Code\depot_tools"文件夹添加到系统的PATH环境变量中。例如,在Windows 10上:
下载脚本:automate-git.py 到 “D:\Code\automate\automate-git.py”。
创建名为"D:\Code\chromium_git\update.bat"的脚本,并将以下内容添加到其中:
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
运行"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"目录中。
cd D:\Code\CEF\chromium_git
update.bat
重新运行update.bat即可
创建名为"D:\Code\CEF\chromium_git\chromium\src\cef\create.bat"的脚本,并将以下内容添加到其中:
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的项目
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源代码,并多次重复此步骤以进行增量构建。
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)创建二进制发行版。
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 文件。
涉及到vs相关环境问题,找到对应脚本:D:\Code\CEF\chromium_git\chromium\src\cef\tools\msvs_env.bat
对应代码逻辑:
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、修改脚本,适配当前环境
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
)
)
)
下载链接:Doxygen download
也可以使用参数规避此问题:--no-docs
查看脚本:D:\Code\CEF\chromium_git\chromium\src\cef\tools\make_cppdocs.bat
:: 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
)
逻辑一目了然,设置环境变量即可
set DOXYGEN_EXE="D:\Software\doxygen\bin\doxygen.exe"
链接失败:链接使用解决方案也就是sln生成的lib -- CEF Forum • make_distrib.bat fails 1107 - trying to merge libs (magpcss.org)
出现问题默认参数会构建sandbox,但是实际发布仅需client,使用如下命令行即可:
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
四种模式分别通过参数“--minimal”、“--client”、“--sandbox”,若没有参数则默认standard模式,每种模式主要影响发布包包含内容。
minimal
client
sandbox
standard(默认)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。