- GCC:即GNU Compiler Collection(GNU编译器套件),可简单认为是编译器。它可以编译很多种编程语言(如C、C++、Objective-C、Fortran、Java等)。当程序只有一个源文件时,直接就可以用gcc命令编译它。
但是若程序包含多个源文件,用gcc命令逐个去编译显然很容易混乱且工作量大,所以就出现了下面的make工具 - make:可以看作一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式,通过调用makefile文件中用户指定的命令来进行编译和链接
- makefile:make工具就像指挥家,根据makefile这个乐谱来指挥整个乐团如何演奏。即make工具根据makefile中的命令进行编译和链接,makefile命令中包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。
makefile在一些简单的工程完全可以人工拿下,但当工程非常大时,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。这时候就出现了cmake这个工具 - cmake:cmake就可以更加简单地生成makefile文件给上面的make用。当然cmake还有其他更加牛的功能,就是可以跨平台生成对应平台能用的makefile,我们就不用自己去修改了。
- cmake根据什么生成makefile:cmake需要根据一个叫CMakeLists.txt的文件(学名:组态档)去生成makefile
- CMakeLists.txt:需要自己手写
- nmake:nmake是Microsoft Visual Studio中的附带命令,需要安装VS,实际上可以说相当于linux的make
- 总结流程:
- 用编辑器编写源代码,如.c文件
- 用编译器编译代码生成目标文件,如.o
- 如果源文件太多,一个个编译就太麻烦了。于是人们想到设计一种类似于批处理的程序,来批处理编译源文件
- 于是就又了make工具,它是一个自动化编译工具,可以用一条命令实现完全编译
- 但又需要编写一个规则文件,make依据它来进行批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的功能
- 对于一个大工程,编写makefile文件也很复杂,这时人们又想到设计一个工具,可以读入所有源文件之后自动生成makefile
- 于是就出现了cmake。cmake能输出各种各样的makefile或project文件,从而帮助程序员减轻负担。cmake中有很多设置库的,此时还不是可执行文件,make生成后才是二进制可执行文件
- 但cmake需要依据一个规则来生成makefile,这就是cmakelists文件
- 用链接器链接目标代码生成可执行文件,如.exe