这段时间在调试cefclient的代码,发现在编译的时候总是出错,出错信息如下:
1>CustomBuild:
1> copy_resources, and also copy_libraries
1> D:\MyCode\MyGit\CEFStudy\Resources\cef.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\cef.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\devtools_resources.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\devtools_resources.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\am.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\am.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ar.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ar.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\bg.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\bg.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\bn.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\bn.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ca.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ca.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\cs.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\cs.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\da.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\da.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\de.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\de.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\el.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\el.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\en-GB.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\en-GB.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\en-US.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\en-US.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\es-419.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\es-419.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\es.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\es.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\et.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\et.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\fa.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\fa.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\fi.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\fi.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\fil.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\fil.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\fr.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\fr.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\gu.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\gu.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\he.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\he.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\hi.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\hi.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\hr.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\hr.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\hu.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\hu.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\id.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\id.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\it.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\it.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ja.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ja.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\kn.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\kn.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ko.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ko.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\lt.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\lt.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\lv.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\lv.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ml.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ml.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\mr.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\mr.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ms.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ms.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\nb.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\nb.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\nl.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\nl.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\pl.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\pl.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\pt-BR.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\pt-BR.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\pt-PT.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\pt-PT.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ro.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ro.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ru.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ru.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\sk.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\sk.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\sl.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\sl.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\sr.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\sr.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\sv.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\sv.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\sw.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\sw.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\ta.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\ta.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\te.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\te.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\th.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\th.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\tr.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\tr.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\uk.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\uk.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\vi.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\vi.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\zh-CN.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\zh-CN.pak
1> D:\MyCode\MyGit\CEFStudy\Resources\locales\zh-TW.pak -> D:\MyCode\MyGit\CEFStudy\out\Debug\locales\zh-TW.pak
1> 复制了 55 个文件
1> 复制了 0 个文件
1> 找不到文件 - *.dll
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: "cmd.exe" exited with code 4.
1>
1>Build FAILED.
从上面的错误信息来看,error MSB6006。网上搜索了一下,大部分的error code都是1或者别的,没见过4的,也尝试了网上的方法,修改Manifest文件,问题依然没有解决。
于是往上面看,“找不到文件 - *.dll”,这是在做什么的时候找不到文件?想了很久没想明白,继续向上追溯,看到了
copy_resources, and also copy_libraries
而“复制了55个文件”全部是pak文件,那说明都是Resources。那“复制了0个文件”,就是libraries。找不到的dll文件,应该就是libraries。于是,用cefclient压缩包直接解压出来的源代码文件对应一下,发现源文件直接编译的Output信息如下:
1> D:\MyCode\MyGit\CEFStudy\Debug\d3dcompiler_43.dll -> D:\MyCode\MyGit\CEFStudy\out\Debug\d3dcompiler_43.dll
1> D:\MyCode\MyGit\CEFStudy\Debug\d3dcompiler_46.dll -> D:\MyCode\MyGit\CEFStudy\out\Debug\d3dcompiler_46.dll
1> D:\MyCode\MyGit\CEFStudy\Debug\ffmpegsumo.dll -> D:\MyCode\MyGit\CEFStudy\out\Debug\ffmpegsumo.dll
1> D:\MyCode\MyGit\CEFStudy\Debug\icudt.dll -> D:\MyCode\MyGit\CEFStudy\out\Debug\icudt.dll
1> D:\MyCode\MyGit\CEFStudy\Debug\libcef.dll -> D:\MyCode\MyGit\CEFStudy\out\Debug\libcef.dll
1> D:\MyCode\MyGit\CEFStudy\Debug\libEGL.dll -> D:\MyCode\MyGit\CEFStudy\out\Debug\libEGL.dll
1> D:\MyCode\MyGit\CEFStudy\Debug\libGLESv2.dll -> D:\MyCode\MyGit\CEFStudy\out\Debug\libGLESv2.dll
1> 复制了 7 个文件
而我的代码就是缺少了这几个文件,于是拷贝到同一个相对目录下,编译成功,问题得到解决。
然后就有些疑问了,编译的时候是如何拷贝文件的呢?逐一检查Project的属性,没发现有异常。搜索copy_resources,只在cefclient.gyp里找到相应的字符串。可是这个.gyp跟project应该没有任何关系的呀?
继续跟进,将cefclient.vcxproj用记事本打开,发现如下配置信息:‘
<ItemGroup>
<CustomBuild Include="binary_distrib\cef_binary_3.1650.1562_windows32\cefclient.gyp">
<FileType>Document</FileType>
<Command>call call xcopy /efy "Resources\*" "$(OutDir)"
if %errorlevel% neq 0 exit /b %errorlevel%
call call xcopy /efy "$(Configuration)\*.dll" "$(OutDir)"</Command>
<Message>copy_resources, and also copy_libraries</Message>
<Outputs>$(OutDir)\copy_resources.stamp</Outputs>
</CustomBuild>
</ItemGroup>
看到这里的Command,就能解释究竟是谁拷贝文件了。xcopy就是拷贝文件的command。
只是这些CustomBuild的配置,在Project的配置里还是没发现在哪里。而且这是如何运行起来的,CustomBuild的机制是什么?这个后续再继续研究。