文章目录
MSVC:Microsoft Visual C++ Compiler
由微软开发的VC运行时库,被Visual Studio IDE所集成。使用VS时会附带MSVC编译器。
GCC:GNU Compiler Collection
GNU编译器套件,是由GNU开发的编程语言编译器。原名为GNU C语言编译器(GNU C Compiler)
Clang
Clang 是一个 C 语言、C++、Objective-C 语言的轻量级编译器。
MinGW:Minimalist GNU For Windows
在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。
实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。
开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。在 windows 下使用 gcc/gdb。
打开 MinGW Installation Manager -> mingw32-gdb-bin
(mingw32-gcc-g++
),右键点击Mark for Installation,然后点击左上角Installation菜单下的Apply Changes选项进行安装。由于墙的存在,会安装失败,可以下载安装包离线安装。
Cygwin
一个在windows平台上运行的类UNIX模拟环境,是Cygnus Solutions公司开发的自由软件。
Unix下编译通过的C代码,在win32下编译可能通不过,因为unix有自己一些独特的API(如fork,spawn,signals,select,sockets),如果代码中使用了这些API 在win32下当然找不到对应的库。
一个能让window编译Unix风格代码的方法
mingw 修改编译器:让window下的编译器把如fork的调用翻译成等价的形式
cygwin 修改库:让window提供一个类似unix提供的库,对程序的接口如同unix一样,这些库是由win32的API实现
make
通常利用 make 工具来自动完成编译工作。如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件;利用这种自动编译可大大简化开发工作,避免不必要的重新编译 。
GNU Make 是一个控制从程序的源文件中生成程序的可执行文件和其他非源文件的工具。
Make从Makefile文件中获得如何构建程序的知识,该文件列出了每个非源文件以及如何从其他文件计算它。
Makefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。
make会在工作目录(执行make的目录)下按照文件名顺序寻找 makefile 文件读取并执行,查找的文件顺序为:GNUmakefile、makefile、Makefile
给 make 指定makefile文件(-f 或 --file),不会自动查找标准命名的makefile文件:make -f MyMake
cmake
Makefile能够解决自动化编译问题,大多IDE软件都集成了make,譬如 Visual C++的 nmake、linux 下的 GNU make、Qt 的qmake等等。
不同的IDE所集成的make工具所遵循的规范和标准都不同,也就导致其语法、格式不同,也就不能很好的跨平台编译,会再次使得工作繁琐。cmake为了解决这个问题而诞生,其允许开发者指定整个工程的编译流程,在根据编译平台,生成本地化的Makefile和工程文件,最后用户只需make编译即可。可以把cmake看成一款自动生成 Makefile的工具,所以编译流程就变成了:cmake—>make–>用户代码–>可执行文件
nmake
可以理解成微软家的make,随着vs安装。
qmake
自动化编译,Qt生成makefile的工具。qmake 其实是来解析 Qt Pro文件的一个程序,主要还是通过编写 pro 工程文件,然后调用 qmake 命令来生成Makefile, 最后生成可执行文件的过程。qmake 其实和cmake 一样生成一个Makefile 的工具。只是qmake 是qt 提供的一个跨平台生成Makefile的软件。
jom
qt的定制nmake。
ninja
Ninja 是Google的一名程序员推出的注重速度的构建工具Ninja 是一个专注于速度的小型构建系统。最初是为了对chromium、Swift等进行快速编译构建。设计哲学是通过包含描述依赖关系图的方式提供快速的构建。
cmake
cmake是一个生成 .ninja 和 .makefile 的工具。因为担心很多人不熟悉makefile文件和ninja文件的写法,所以cmake只需要用户通过对源码文件的简单描述(就是CMakeLists.txt文件),就能自动生成一个project的makefile文件或者ninja文件,然后就可以通过ninja或者make进行启动编译了,很多IDE都在用cmake作为项目管理工具。