最初的操作系统Unix并不是完全开源的,其中有一些内容是闭源的,所以理查德·马修·斯托曼提出了GNU计划,想要开发一个完全开源的操作系统。
后来Linux开发出了Linux系统,理查德·斯托曼主张,Linux操作系统使用了许多GNU计划软件,应正名为GNU/Linux,但没有得到Linux社群的一致认同,形成GNU/Linux命名争议。
如下图所示,注意GCC并不是一个编译器,而是GNU平台下的编译器集合,它包括了常见的gcc和g++,也就是C语言和C++编译器。
也就是如果有源代码和GCC编译器集合,那么就能编译C或者C++代码了。
MinGW是为Windows设计的最小的GNU平台,他是从GCC修改而来,专门为Windows设计的编译器。
3.Make和MakefileMake是GNU平台下使用的编译命令,可以配合Makefile使用。由于GCC编译器集合在多文件使用的时候很不方便,所以设计了Makefile指定编译配置,然后用Make命令执行这些编译配置。
但是Makefile还存在跨平台的问题,就是同样的程序在不同平台上编写的Makefile文件不同。
为了解决Makefile跨平台的问题,需要使用CMake工具。CMake可以看成是一个软件,配合CMakeLists.txt编译配置文件,然后哦使用CMake命令,就可以对不同的平台生成对应的Makefile文件,然后再调用Makefile进行编译。



