1. 问题场景
gcc(GNU Compiler Collection)即为GNU编译器套件,也可以简单认为是编译器,它可以编译很多种编程语言,包括C、C++、Objective-C、Fortran、Java等。当程序只有一个源文件时,直接就可以 用gcc命令编译它。但如果源文件太多,一个一个编译就会显得非常繁琐,于是研发人员想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具。
1.1 makefile
一个规则文件,make依据该规则文件来批处理执行编译。
问题:对于一个大工程,编写makefile是件极其复杂的事,手动编写不仅耗时且容易出错,于是研发人员又想到,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了CMake工具
2. 定义
CMake是一个跨平台的自动化 安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。
- 输出各种各样的makefile或者project文件 。
- 编写cmakelists文件,它是CMake所依据的规则(值得注意的是,相对于编写makefile文件,编写makelists文件要简单的多)
2. 1原理
输入:组态档CMakeLists.txt文件(组态档是一种建构软件专用的特殊编程语言写的CMake脚本)
输出:各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
2.2 CMake 功能
- 可以编译源代码、制作程序库、产生适配器(wrapper)
- 可以用任意的顺序建构执行档。
- 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。
- 支持静态与动态程式库的建构。