gcc make cmake bazel 等编译工具的区别

前言

遇到需要安装tfserving安装模块时,需要通过bazel去编译,所以就去了解这些编译工具,并做相关记录。

编译的作用

对于我们用C, C++, java,go等语言编写的代码,电脑是不能直接阅读理解的(chatGPT 可能理解,但我们说的是机器本身);所以我们需要将这些代码翻译给机器,让机器明白我们写的代码。这样一个过程就叫做编译。

gcc make cmake bazel 等编译工具的区别_第1张图片

 GCC 

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。

如图所示,c文件使用gcc 通过 预处理,编译 汇编,链接等操作,然后成为可执行文件,这就完成这个编译过程。

gcc make cmake bazel 等编译工具的区别_第2张图片

 make

 make是一个命令工具,通过makefile文件完成一系列文件的编译。一般单个文件用gcc编译没什么问题,但是对于工程来说,有很多的文件不可能逐个使用gcc去编译,因此用make就更省时省力。makefile文件就是告诉make 有条理的去完成编译工作。详细make教程参考:Make 命令教程 - 阮一峰的网络日志

gcc make cmake bazel 等编译工具的区别_第3张图片

 cmake

CMake(cross platform make)是一个跨平台安装(编译)工具。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(构建文件)(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。

CMakeLists.txt 规定了整个编译的流程,我们学习的CMake 也就是要学习CMakeLists.txt的编写规则 可参考文章CMake应用:CMakeLists.txt完全指南 - 知乎

Bazel

Bazel:Build and test software of any size, quickly and reliably任意大小、快速、可靠的测试软件。Bazel是google推出的一款工程编译工具,并且已经将其开源。

bazel的优势:加快构建和测试速度,一种工具,多种语言,可缩放.

  • Workspace :通常你可以理解为一个工程,对应一个repo,一个项目有自己唯一名字(Bazel鼓励它是全网唯一的);一个Workspace的顶层目录下应该有一个 WORKSPACE 文件
  • Packages :一个包含 BUILD 文件的目录和其目录下的其他所有文件和子文件夹(包含 BUILD 文件的子文件夹除外);
  • Targets :一个构建目标;由一个规则( rule )给出,必须有一个名字;

bazel 命令相关文档 命令和选项  |  Bazel

你可能感兴趣的:(c++,开发语言,编辑器)