【C++】【编译器】C语言编译器的那些事

GNU和Linux

Linux相信大家都不陌生,它是一个开源操作系统,但是在早期,它指的仅仅是操作系统内核,由于操作系统内核叫做Linux,慢慢人们也习惯把这个操作系统叫做Linux系统了

GNU是一个自由软件计划,在GNU浪潮下,孕育了一大批自由软件,它们叫做GNU软件,GNU软件采用的授权协议叫做GPL协议

由于Linux系统大量使用了GNU软件,它可以被视为Linux内核+GNU软件的组合,所以有人也建议将Linux系统成为Linux/GNU系统

GCC和G++

它们两个分别是C和C++的编译器,用于将源文件编译成程序
GCC:GNU C Compiler
G++:GNU C++ Compiler
从命名就可以知道,它们实际就是GNU软件,只不过功能定位是语言编译器
GCC也可以编译C++程序,只不过在使用上麻烦一点,需要一些额外设置
由于C++语言本身就包含了C语言在内,所以G++肯定也是可以编译C语言代码的
这里简单说明下这两个属于的概念,具体工作原理和关系,大家请自行了解,不属于博客范畴

make与makefile

当源文件只有一个的时候,我们只需手动去执行GCC/G++命令即可,但是当源文件有很多个时,它们不但需要逐个去手动编译,还要连接起来,这样就极其麻烦了,于是make诞生了

make是一个具有类似批处理功能的编译工具,它可以调用GCC/G++命令,它根据一个名为makefile的脚本配置文件来决定如何对多个工程文件进行批量编译

cmake与CMakeLists

make虽然能够完成多个文件批量编译的功能,但是它有着诸多缺陷,一是编写比较麻烦,二是每个普通的脚本内容都不一样

扫描二维码关注公众号,回复: 9930590 查看本文章

cmake就是在这种情况下诞生的,它的功能就是自动帮我们根据不同的平台生成不同的makefile文件,给make命令使用,而CMakeLists则是cmake的脚本配置文件

MinGW

MinGW全称Minimalist GNU for Windows,它是一套用于生成Windows程序的GNU工具集,包含了GCC/G++/make等编译程序,还有一系列Window程序运行所需要的依赖库,

Cygwin和MSVC

Cygwin和MSVC是和MinGW同一性质的东西,都是用于生成Windows程序的一整套编译环境,只是特点不同

  • 相同点:他们最终都生成Windows程序,一般为exe文件
  • MinGW:既能运行在Linux上,也能运行在Windows上,所以它是跨平台的
  • Cygwin:只能运行在Windows上,它是一套模拟Linux环境的编译器
  • MSVC:只能运行在Windows上,它是微软自己的编译器,由于Windows也是微软的,所以MSVC是编译效率最高的
  • MinGW和Cygwin其实都依赖于GCC/G++/make,对它们做了修改,来形成自己的一套编译器
  • 如果想将Linux下的程序迁移到Windows,可以使用MinGW
  • 如果想在Windows上开发Linux风格的软件,可以使用Cygwin
  • 如果是纯粹的Windows程序开发,可以使用MSVC

MinGW和Cygwin是如何将GCC移植到Windows上的

  • MinGW将GCC对Linux系统接口的调用替换为对Windows系统接口的调用,这样使用同Linux系统上一样的代码,就可以被编译出Windows程序
  • Cygwin则是编写了一个名为cygwin.dll的共享库,将Windows中不存在的Linux风格接口,用WindowsAPI重新编写封装在里面,这样就在Windows系统上模拟出了一套Linux环境,之前Linux系统上的代码照样可以运行
  • 对比二者的实现方式,可以总结出,MinGW将所有系统相关接口全部重写了,工作量比较大,编译出来的是Windows风格的软件。Cygwin则是尽量保留Linux风格,Windows中实在不存在的接口,才用WindowsAPI去重写,模拟出在Linux上的功能
发布了442 篇原创文章 · 获赞 45 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/u013718730/article/details/104223180