目录
一、编译底层代码
这个四个是静态库
报错1:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1299,5): warning MSB8012: TargetPath(E:\20201125\cocos2d-x-2.1.5\XCommon\Debug.win32\dbUI.lib) does not match the Library’s OutputFile property value (E:\20201125\cocos2d-x-2.1.5\XCommon\Debug.win32\dbUI_d.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1301,5): warning MSB8012: TargetName(dbUI) does not match the Library’s OutputFile property value (dbUI_d). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
dbAlign.obj : warning LNK4221: 此对象文件未定义任何之前未定义的公共符号,因此任何耗用此库的链接操作都不会使用此文件
dbEventSet.obj : warning LNK4221: 此对象文件未定义任何之前未定义的公共符号,因此任何耗用此库的链接操作都不会使用此文件
只成功生成了3个静态库,失败一个
原因1:
编译器找不到“libToolkit/DBLog.h”,这个不是C++库文件,我们需要指定查找目录路径
解决1:
应用,然后确定,报错消失
报错2:
e:\20201125\cocos2d-x-2.1.5\xcommon\resourcelib\classes\dbresfntloader.cpp(43): error C2039: “initWithFNTContent”: 不是“cocos2d::CCBMFontConfiguration”的成员
e:\cocos2d-x-2.1.5\cocos2dx\label_nodes\cclabelbmfont.h(108) : 参见“cocos2d::CCBMFontConfiguration”的声明
Error:class "cocos2d::CCBMFontConfiguration"没有成员“initWithFNTContent”
原因2:
查看引擎代码验证一下:
按F12
这个路径我已经改过了,可能没有生效,重启一下vs
发现还是一样的
弄着弄着,我发现不对,底层代码应该从引擎代码中拿出来,不用装在一起,给lua业务逻辑的人,他们只不过是用到exe,还有很多动态库,我们底层代码不用给他们看,封装起来。
到时把debug和release版本的动态库和exe编译好了,拷进这两个文件夹里面
把XCommon删除,压缩这个cocos2d-x-2.1.5文件夹发给lua业务逻辑的人。这样只写lua的人就只知道用给他们封装好的接口,永远都不知道C++实现细节,达到了封装后隐藏实现方法的好处。
二、正确编译底层代码
引擎代码和底层代码分开
编译好四个静态库
三、打开游戏工程
游戏工程目录和引擎目录分开
我之前是把自己创建的游戏工程放在引擎目录的,这样不好,因为我们后期是要把引擎目录改造完发给lua换皮业务逻辑人员用的,他们只需用的exe和一些dll动态库就好,其他都不需要看见。
如何创建可以参考我之前写的:
https://blog.csdn.net/xiaoduangg/article/details/110141570
为此我把之前的工程移出来
打开引擎目录的解决方案
把我们的游戏工程加进解决方案
可以给它重命名改一下名字,这样放到最下面
设置启动项,运行一下
生成一下
保持封装性
游戏工程项目不要加入加入引擎目录的解决方案
我们之前生成的游戏工程,都是拷贝引擎提供的demo工程来创建,实践工作项目肯定不会和引擎一模一样的,而且我们还要对引擎的网络协议,UI等进行二次封装,使得lua换皮人员比较容易上手,不用看那么复杂代码。
后面我再单独讲,这个X0.sln工程创建的细节,这里我先直接用
中间目录和输出目录
当我们生成的时候,一份生成在自己工程本地,一份生成去引擎工程目录,给lua换皮人员永远看到的是那份只是多了动态库和exe的引擎目录
四、换了底层代码路径
xcopy /Y “E:\20201125\BottomCode\xcommon\trunk\Debug.win32\DBLua_d.lib” “D:\BottomCode\xshared\dbLua\lib\win32”
xcopy /Y “…\Classes\dbLua*.h” “D:\BottomCode\xshared\dbLua\include\dbLua”
xcopy /Y “…\Classes\lua\tolua\tolua++.h” “D:\BottomCode\xshared\dbLua\include\tolua”
通过查看静态库生成的日志文件,发现静态库生成完成以后,都会强制拷贝一份去D盘的BottomCode
而我现在是想把路径改为E盘的BottomCode,该如何改呢
XML文件
你就算改了环境变量重启都没有用,在xml文件里面随便打一空行,然后保存,重新加载解决方案
生成的时候如果遇到这种报错
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1299,5): warning MSB8012: TargetPath(E:\20201125\BottomCode\xcommon\trunk\Debug.win32\dbResource.lib) does not match the Library’s OutputFile property value (E:\20201125\BottomCode\xcommon\trunk\Debug.win32\dbResource_d.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(1301,5): warning MSB8012: TargetName(dbResource) does not match the Library’s OutputFile property value (dbResource_d). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
解决方法
我是在环境变量里面配了一个ProjectDir的宏,但是写错了,我把它删了
最后都会生成到这个目录xshared
有d的是debug版本,没有d的是release
tolua+±1.0.93
tolua是一款工具,大大简化了C/C++和Lua代码的集成。基于干净的头文件(或从真正的头文件提取),tolua自动生成绑定代码供lua访问C/C++的功能。使用Lua API和标记方法设施(tag method facilities),tolua可以映射C/C++的常量,外部变量,函数,类和方法到Lua。 tolua++是tolua的一个扩展版本,一款集成C/C++和Lua代码的工具
我们这里把静态库lib文件拷贝进对应的目录
我们把dblua下面的所有.h头文件拷进对应目录,还有一个tolua++.h头文件,但是实现方法的cpp文件我们依然保留在我们的底层代码里面
其他三个的日志:
所以即使把xshared目录给出去,底层代码保留,依然是安全的
五、再次打开游戏工程
多态库就一般就不是我们自己写的了,从网上下的资源,用前人写好的
编译还是有很多问题,需要配置
六、总结
本来想一篇博客总结完的,但是发现似乎不行,那就得很长的博客了,感觉还是要多写几篇才行
后面我会重点分析每个exe或者静态库或者动态库