1、gcc与g++
首先来了解下编译器的主要工作流程:
源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler) >> 汇编程序(Assembler)>> 目标代码(Target Code) >> 链接器(Linker)>> 可执行程序(Executables)
gcc:
GCC,全称GNU Compiler Collection,是GNU编译器套装,最开始编译C语言,后来可以处理C++以及Fortran、Java、Go等其他语言。
g++:
而g++是GCC对C++的升级版本。
gcc与g++的区别:
两者都可以编译C和C++代码;对于.c文件,GCC把它当做C程序,G++当做C++程序;对于.cpp文件,二者都将其视为C++程序。
编译阶段,G++会调用GCC,对于C++代码,两者等价;但GCC不能自动和C++程序使用的库链接。所以,对于C++程序,一般都使用G++做编译和链接。
小结:
- g++是gcc对C++的升级版本,编译阶段,会调用gcc。
- 如果你有一份C写的源代码(.c文件),你可以用gcc来做编译和链接,也可以用g++;但是源代码是C++写的话,只能用g++了,应为gcc不能自动和C++程序使用的库链接
2、Make与Makefile、CMake与CMakeLists.txt、qmake
GCC/G++一般用于单个源文件的编译,当一个工程有多个源文件时,再用GCC/G++逐个编译的话,效率太低了,所以就出现了Make工具。
Make相当于一个批处理命令,本省没有编译功能,通过makefile规则文件调用GCC/G++或其他命令来编译和链接。当工程较大时,手写makefile比较麻烦;且在不同平台下编译时,需要重新修改makefile,十分麻烦,因此CMake应运而生啦。
CMake是一个跨平台的编译工具,通过规则文件CMakeLists.txt生成Makfile文件,CMakeLists.txt文件需要自己去写。
qmake是为Qt量身打造的编译工具,Qt是跨平台C++图形用户界面应用程序开发框架。qmake根据Qt工程文件(.pro)生成跨平台的makefile文件。
小结:
当我们在qt写好CMakeLists.txt并运行,点击构建可能用到qmake根据CMakeLists.txt文件生成makfile。点击CMake,用到CMake根据CMakeLists.txt文件生成makfile。然后再是Make(批处理命令)根据刚刚得到的makefile文件调用G++/GCC编译器进行对源代码进行编译和链接。
参考:
https://www.cnblogs.com/dinghongkai/p/11316528.html#