CMake是一个跨平台、开源的构建系统,在功能上可以取代autoconf/automake(应该有听说过吧)。

    在FreeBSD中的安装依然可以通过强大的ports系统来完成,在/usr/ports/devel/cmake路径下运行make install。但这里我想说说手动安装的过程,顺便可以熟悉一下这个系统。首先需要注意它的默认编译器是gcc/g++,想要修改成最新的clang编译器,可以修改3个环境变量:

CC=clang               # 或者全路径,比如/usr/local/bin/clang

CXX=clang++        # 或者全路径,比如/usr/local/bin/clang++

CPP=clang-cpp    # 或者全路径,比如/usr/local/bin/clang-cpp

    接下来先运行configure,这里需要说明一下:刚开始我看到configure感觉好熟悉,但仔细看一下文件内容才知道,这实际上是调用bootstrap脚本。CMake已经做到完全脱离autoconf/automake,而在它本身还没安装的情况下,这个脚本用来自举(从它的名字就可以看出来)。运行的结果就是先编译出一套迷你版的CMake,由它来构建完整的CMake系统。脚本运行之后,会自动生成Makefile,接下来只要运行make install就可以耐心等待它的完成。


    如果您原先已装好了CMake,现在想更新版本,就可以用旧的版本来构建新的系统。我这里虽不是为了升级,却也特地重新构建了一下CMake,目的是想顺便熟悉一下它。CMake包含一系列的脚本,最重要的是提供2个工具:cmake和ccmake。先说cmake,它的功能和configure差不多,用来生成Makefile,在FreeBSD系统可以这样运行:cmake -G 'Unix Makefiles' /root/cmake-2.8.9。

    这是用来生成Unix环境的通用Makefile,后面那个参数指的是源码的路径。

    需要注意的是,CMake有2种构建方法:如果你在源码路径下构建,由此生成的所有文件都和原先的源码混和在一起(称为in-source);或者你可以另选一个新的目录来构建,这样做的好处就是不会污染原先的源码。

    再说ccmake,它的用法和cmake类似,不过它基于文本界面,而不是命令行。运行ccmake -G 'Unix Makefiles' /root/cmake-2.8.9之后,如果你想继续下去的话,需要按c键让它帮你生成一个配置文件。这个配置文件就是CMakeCache.txt,内含一系列的参数,这些参数有些是从环境变量那边带过来的,比如之前说的编译器参数。您可以直接修改这个文件,也可以通过ccmake的界面来修改,按t键可以在普通参数和高级参数之间切换。参数修改好之后,按g键来生成之后构建所需要的一些文件。最后一步还是运行make install来完成整个过程。