利用cmake来搭建开发环境

对于常常在终端下写程序的non-windows程序员,Makefile绝对是最经常使用的工具,小到一个文件的简单的测试程序,大到数百个文件的商业软件,只须要有shell,一个make命令就可获得可运行的程序,Makefile绝对功不可没;惋惜世界中不是那么太平,不但各个Posix系统的API千差万别,硬件平台各异,就连Makefile自己也有多个不兼容的格式,譬如GNU Makefile 拿到Solaris平台上就无法make下去,除非你有gmake,但gmake对并行编译的支持就没有solaris自带的dmake要好了。

GNU autotools提供了一个不错的选择,能够作到组织工具链来生成所需的Makefile,但缺陷是学习起来比较麻烦,并且模版文件写起来比较费劲。老实说我跟Makefile打了近3年的交道,几乎没有本身写过automake脚本,相反的工做却是干了很多,譬如分析生成的Makefile运行过程,而后模拟本身手写Makefile;获得一个轻爽的定制环境。

除了autotools,其实也有很多其余的工具,譬如apache的ant,基于Python的scons;ant在java界是鼎鼎大名了,惋惜对c++的支持确实让我感受很不习惯;scons号称能够嵌入Python代码,用起来也算简单,可是想实现复杂的功能就很头疼了,并且运行速度让人挠头。

cmake则弥补了上述几个工具的诸多缺陷:
1> 易于学习,文档易懂,只需牢记如下两个命令便可:java

cmake --help
cmake --help-command-list
cmake --help-command xxx
cmake --help-variable-list
cmake --help-variable yyy

2> 以文本文件组织,利用cache的方式,全部的自定义cache变量可直接用vim查看。
3> 生成的Makefile文件简洁易懂
4> 编译器选项可本身在ccmake中编辑,利于交叉编译
5> 支持集成ctest/cpack,前者能够方便的作单元测试,后者则能够打包生成tgz/rpm
6> 支持多个生成器,能够生成eclipse/codeblocks/gmake/unix make文件,甚至能够生成VC各个版本的dsw/sln.
7> 内嵌语言,能够本身写函数、宏等

对于常常写小测试程序的人来讲,在test目录下加上个CMakeLists.txt,里边加上几行简单的语句就能够方便的之后重复使用了。对于这种状况,手工写的Makefile碰到依赖检测这种麻烦的事情每每力不从心,automake又过小题大做,而cmake则恰到好处了。

对于大型程序,cmake能够本身定制生成的中间文件和目标文件路径,有效避免了automake带来的每一个目录下生成一大堆文件的弊端,也不须要手工写Makefile。
最有用的是能够生成多个知名IDE的工程文件,包括Windows下的vc6-vc9.c++

相关文章
相关标签/搜索