CMake构建实战:项目开发卷
上QQ阅读APP看书,第一时间看更新

第2章 CMake简介

CMake官网给出了如下的定义:CMake是一个跨平台开源工具家族,用于构建、测试和打包软件。CMake通过简单的平台无关且编译器无关的配置文件来控制软件的编译流程,并能够生成原生的Makefile和工作空间,以便用于用户所选择的编译环境。为了满足开源项目对强大的跨平台构建工具的需求,Kitware公司创建了CMake工具套装。

定义中,“跨平台”和“开源”这两个特性不必多说,要注意的是“工具家族”这个说法。狭义的CMake一般特指用于构建项目的CMake工具及其使用的CMake脚本语言,而广义的CMake指的是一系列工具的组合,包括用于构建的狭义的CMake、用于测试的CTest、用于打包的CPack等,它们都属于CMake家族。本书的主要内容仅涉及狭义的CMake。

“平台无关且编译器无关的配置文件”指的是类似Makefile的配置文件。但CMake的配置文件是平台无关且编译器无关的,能够做到一次编写,到处编译。

“能够生成原生的Makefile和工作空间”是在说CMake本身并不实际调用编译器和链接器等,而是根据配置生成Makefile或者其他构建工具的配置文件,通过它们来实际调用各种命令完成构建。工作空间指与IDE相关的构建工具的配置,如Visual Studio中基于MSBuild的解决方案和项目工程文件,以及Xcode、CodeBlocks等其他IDE的项目工程文件。可见,将CMake称为构建工具不够准确,它更像是一个“元构建工具”,或者说是“构建工具的构建工具”。毕竟,它自己不会构建程序,而是指导其他构建工具来构建程序。这样的好处也很明显,就是“以便用于用户所选择的编译环境”。即便IDE不支持打开使用CMake 组织的项目,但总可以打开通过CMake生成的IDE原生项目。

简单介绍一下Kitware公司。这是一家软件研发公司,专注于计算机视觉、数据分析、科学计算、医学计算、软件开发流程等领域。Kitware采用开源的商业模型,提供定制解决方案、技术支持和培训等商业服务。针对CMake,Kitware公司提供了“迁移到CMake”“CMake现场培训”“CMake技术支持”“CMake定制开发”等多项商业服务。希望本书能够帮助读者或企业节约上述业务的开销。