这段时间一直在折腾Cocos2D-X第三方库的自动编译脚本,目前引擎差不多集成了20个左右的第三方库,80%都是使用的预编译库,也有一直直接使用的源码(比如Box2D,Spine)。 但是,我们的最终目标肯定是要全平台全部使用预编译好的第三方库,因为这样可以加速引擎本身的编译时间。另外,为什么要折腾这些编译脚本呢?主要是为了以后更新和升级第三方库方便。毕竟那么多平台,如果每个开发者都要自己手动去编译,就太浪费时间了。

本文主要是记录此过程中的一些心得体会。

没有银弹!

之前我写过一篇文章《使用CMake编译跨平台静态库》,当时主要是为了解决Box2D,Chipmunk和Spine的静态库编译问题。当时,感觉用CMake太爽了,一个CMakeLists.txt配置好以后,把编译脚本复制粘贴,然后改几个参数,立马刷刷ios/mac/android/linux的静态库都编译出来了。于是乎,我坚信所有的第三方库都可以如此轻松都定。直到我在编译jpeg, png, webp,tiff的时候,我被坑到了。

首先,这些库都是自带编译脚本的(autoconf那一套)。它们编译用到的部分配置头文件都需要在configure的时候动态去生成,这导致我们在编写Android.mk或者CMakeLists.txt的时候,会遇到头文件不存在的问题。

其次,关于CMake方案.我在用android cmake toolchain的时候,发现无法生成对应系统的头文件。因为每个平台的头文件可能不尽相同,需要区别对待。(虽然这些包含头文件的名字一样,但是里面内容可能有细微差别的)当然,这也可能是我自己的配置问题,因为同样的CMake,ios/mac/linux是没问题的。

最后,我发现还是得靠Android NDK的standalone toolchain配合这些第三方库的编译脚本,然后通过传递特定的参数来编译最靠谱。

因此,我总结出来:如果是那种头文件跟平台无关的第三方库,那么直接使用之前的CMake方式是最简单的。如果有依赖,则还是使用它们自带的编译系统比较省事。这也说明了一个道理,没有银弹啊!

扯到这个问题,我又想到了我之前使用Vim,后来转到Emacs,但是我还在用IDE。没有银弹啊!

追求高标准

在编写这些编译脚本的时候,因为shell脚本本身的语法比较简单,编写起来也比较随意。所以,我没有过多地关注代码风格,通用性什么的。因为每次编译都要耗费不少时间,好不容易编译成功了,哪来时间考虑这些问题啊,早被"胜利"冲昏头脑了。

但是,我后面回来检查之前写好的一些脚本,发现里面还带有自己的本地路径,而不是通过程序去获取的。这对于一个自称是专业程序员的人来讲,是很难堪的。

一定得坚持高标准来做事,让自己看起来专业一点,这是一种Bigger,Bigger一定不能low.

很多时候,我们一件事情没有做到最好,可能都是源于没能坚持高标准的做事风格。写代码不坚持高标准,一不留神,可能风格就走样了。做Code Review,做着做着,可能随便看看就完事了。写文章,写着写着,可能就水了。

为了不让自己堕落,以后做事情一定得坚持高标准。哪怕花更多的时间和精力,做完并做好一件事情肯定要比不断地进行很多未完成的事情要强。

容忍不完美

容忍不完美还得从强迫症说起。相信很多人都有升级软件的强迫症,看到手机图标上面有一个红色,表示有升级版本,立马就点击升级了。也不管这次升级到底是解决了什么bug,提高了易用性?或是有很牛比的功能?这个新版本真的是你想要的吗?我之前就因为升级小米系统,结果root没有了。再次想root的时候,手机变砖了。于是我坐车去小米之家去维修,结果耗费了大半天的时间。真的是“不作死就不会死啊”!

另外,还体现在,操作系统一定要是最新的(有时候连beta版本也不放过),引擎版本一定要更新最新的。下载一个软件,可能3个月不用,但是打开如果提示有新版本就一定会升级之类的。

但是,频繁升级真的很坑。浪费了大量时间不说,还会经常破坏你的正常工作流程。比如不兼容啦,比如新的bug啦。

就比如,我使用了Emacs以后,我就想什么事情都在Emacs里面完成。因为有人不是说Emacs是操作系统吗?不过真的很坑,什么浏览网页,写邮件,聊天之类的,还是喜欢用外部的应用来解决。虽然我也配置好了,但是说实话,使用的机会很少。

使用CMake以后,我想让所有的第三方库都支持CMake,但是现在还是两者并存。这是一种和谐的不完美。

还有学习C++,有时候我们就想吃透她的全部,然后再去写代码(呵呵~)。

还有学习Cocos2D-X,总感觉自己还有很多东西不了解,还有很多教程没有看完,总想等自己对Cocos2D-X了解的差不多了再动手写代码。

但是,这样会降低效率的。此时,我们要能够容忍这些不完美。然后在实践中,不断地学习,不断地一点点地去完善之,使之趋于完美。

结语

每个人的时间和精力都是有限的,如何让自己的时间和精力变得更高效,这是值得自己深思的问题。