CMake并没有想象中好用


简单说,CMake可以自动生成各个平台的build(make)文件,从而达到编写一份build脚本就可以自动在各平台生成独自的工程文件。

这似乎听起来很好,但是实际使用中会有各种恶心的问题。导致有的时候我宁愿自己重新搭建工程文件也不想用cmake。

1、首先你要熟悉cmake才能知道为什么它没有成功的生成工程文件,单单一个xxx not found是无法帮助我们解决问题的。但是大多数时候我并不想学习cmake,我想要的仅仅是生成工程文件,然后运行。之后ide再报什么文件没有找到的话,我自己再修改和添加。我熟悉vs 也熟悉xcode,但是现在还要熟悉cmake。。。。。

2、紧接着上面一点,cmake的工程文件并不那么好生成。很多时候由于各种依赖,导致无法生成。如果作者心地善良的话,还会准备好depslibrary,否则的话,你就要自己一个一个去找。这起始并没有什么问题,但是我宁愿先给我生成工程文件,然后我对其进行删减,去掉不需要的东西,或者是我再一个一个添加依赖库。虽然这听起来跟先准备依赖库然后再生成工程差不多。但是实际操作中完全是两码事,因为我熟悉vs,我可以轻易的按照自己的喜好添加好对应文件(比如相对路径,比如我自己保留一份常用的第三方库依赖包)。如果用cmake,你必须把指定的文件放到指定的地方。(ps:虽然我知道这些强制依赖并不是cmake的问题,但是很多人滥用了这些强制检查,就使得cmake并不符合我的胃口)

3、cmake还有个功能是可以设置编译前和编译后运行脚本。这个原本很正常,但是实际使用中还是会有把你恶心到。比如xcode下面作者可以设定自动拷贝一些资源文件,但是这并不方便,也跟我的传统用法相矛盾,以至于我要重新添加下资源文件,并且要修改生成的包的位置。

说了这些鸡毛蒜皮但是确确实实把我恶心到的小事,然后再说说我心目中的可以方便使用的跨平台工程是什么样子的:

1、作者在哪个平台开发,提供哪个平台的工程文件,这样我们至少有一份保证正确的工程文件。(如果是vs的话,使用相对路径,避免本地文件依赖。)

2、代码本身足够清晰,把平台相关的东西集中到一起。这样即便没有提供xcode的工程文件,我也可以非常轻易的搭建好工程----简简单单的把文件拖进来,删除非mac平台的文件,添加好依赖。这里举个反例,freetype虽然功能强大到无以复加,但是代码实在是恶心,各种#include "xxx.c"的形式,而我们真正需要编译的文件隐藏在各种被包含的.c文件之中,如果要搭建一个xcode的工程,要从中一个一个把文件摘出来,我只想说,何必呢?

相关内容