1、下载Chromium Embedded Framework (CEF)二进制包
选择windows 64bit:https://cef-builds.spotifycdn.com/index.html#windows64
下载后将库复制到\Source\ThirdParty\CEF3目录,并按如下方式改名
cef_binary_89.0.17.ge7bbb1d_windows64
并将Debug或Release下所有文件(.dll、.bin)级文件夹复制到Engine\ThirdParty\CEF3\Win64\,如果需要调试则要将下载的匹配版本的libcef.dll.pdb拷贝到此文件夹下。
2、修改\Source\ThirdParty\CEF3\CEF3.build.cs
public CEF3(ReadOnlyTargetRules Target) : base(Target)
{
/** Mark the current version of the library */
//string CEFVersion = "3.3071.1611.g4a19305";
string CEFVersion = "89.0.17.ge7bbb1d";
3、编译libcef_dll_wrapper.lib
1)修改\Source\ThirdParty\CEF3\cef_binary_89.0.17.ge7bbb1d_windows64\libcef_dll\目录下的CMakeLists.txt文件,在顶部加上cmake_minimum_required(VERSION 3.2)
2)启动shell,在刚才的目录下运行cmake -G "Visual Studio 16"
如果出现错误
CMake Error at CMakeLists.txt:752 (SET_LIBRARY_TARGET_PROPERTIES):
Unknown CMake command "SET_LIBRARY_TARGET_PROPERTIES".
注释SET_LIBRARY_TARGET_PROPERTIES为:
#SET_LIBRARY_TARGET_PROPERTIES,成功后在libcef_dll目录下会生成Project.sln,用vs2019打开编译,可能会出现引用错误需要修改引用目录,按如下操作:
工程属性->C++目录:包含目录新增“$(SolutionDir)..\”
3)如果出现std::max错误,是因为工程中包含了windows.h或windef.h头文件,再使用c++标准库std::min或std::max,出现引用错误,要在工程配置中定义NOMINMAX宏,操作办法如下:
选择C/C++; 选择Preprocessor预处理器;在Preprocessor Definitions项中输入需要定义的宏名即可
4、因为升级内核,很多函数发生变化,需要注意修改,并重新编译ue4代码
5、如果需要修改工程配置,可参考
https://bebylon.dev/ue4guide/build-guide/ubt/buildconfiguration-xml-example/
6、编译UnrealCEFSubProcess,这个需要手工编译,编译时会出现部分C++文件编译不过,是因为cef类接口发生了变化,需要进行修改
1)
2)如果遇到编译错误:
E:\UEProjects\UnrealEngine\Engine\Source\Programs\UnrealCEFSubProcess\Private\UnrealCEFSubProcessRemoteMethodHandler.h(60): error C3646: “OVERRIDE”: 未知重写说明符
是因为,ue4中将OVERRIDE 宏undef了,需要为工程定义宏(加上红色部分):
#define OVERRIDE override
#pragma push_macro("OVERRIDE")
#undef OVERRIDE // cef headers provide their own OVERRIDE macro
THIRD_PARTY_INCLUDES_START
#if PLATFORM_APPLE
PRAGMA_DISABLE_DEPRECATION_WARNINGS
#endif
#include "include/cef_app.h"
//#include "ThirdParty\CEF3\cef_binary_89.0.17.ge7bbb1d_windows64\include/cef_app.h"
#if PLATFORM_APPLE
PRAGMA_ENABLE_DEPRECATION_WARNINGS
#endif
THIRD_PARTY_INCLUDES_END
#pragma pop_macro("OVERRIDE")