1.1 Makefile
Makefile 是一个用于自动化编译和构建过程的文本文件,尤其在软件开发项目中被广泛使用。它定义了一系列规则,说明了如何将源代码文件编译成可执行文件、库或者其他目标文件。Makefile 的核心作用在于它能够管理源代码文件之间的依赖关系,并只重新编译那些发生更改或者其依赖项发生更改的文件,从而极大地提高了编译效率。
Makefile 中主要包括以下元素:
- 目标(Targets):Makefile 中的一个任务或者产物,可以是可执行文件、目标文件(.o)、库文件等。
- 依赖(Prerequisites):生成目标所需要的输入文件或条件。
- 命令(Commands):用于生成目标的具体操作,如编译、链接等,通常是一系列 shell 命令。
当开发者在命令行输入 make
命令时,Make 工具(通常是 GNU Make)会读取当前目录下的 Makefile,并根据文件中的规则自动执行必要的编译步骤。Make 工具还会检查每个目标的修改时间与其依赖项相比是否更新,以决定是否需要重新编译该目标,这一特性确保了只有当真正需要时才进行编译,节省了时间和资源。
与makefile相关的概念:①GNU ②GCC ③GDB ④Unix ⑤Linux
1.2 GNU
GNU 是 "GNU's Not Unix!" 的递归缩写,是一个由自由软件基金会(Free Software Foundation, FSF)发起的项目,旨在创建一个完全自由的操作系统。GNU 系统意在成为Unix系统的替代品,同时强调软件自由的理念,即用户应该有运行、复制、分发、学习、修改和改进软件的自由。GNU项目不仅开发了操作系统的核心组件,还开发了许多基础软件和工具,其中就包括了GCC。
1.3 GCC
GCC,全称 GNU Compiler Collection(GNU编译器套件),是GNU项目的一部分,是一个强大的编译器集合,支持多种编程语言,如C、C++、Objective-C、Fortran、Ada、Go等。GCC最初是为GNU操作系统设计的官方编译器,但因其高质量和跨平台的特性,现在已成为大多数类Unix操作系统(如Linux、BSD、macOS)的标准编译器,并且也能在其他操作系统如Microsoft Windows上使用。GCC遵循GNU General Public License (GPL),是一款自由软件,任何用户都可以自由地使用、复制、修改和重新发布它。
1.4 GDB
GDB 是 "GNU Debugger" 的缩写,是 GNU 项目提供的一个强大的调试工具。它主要用于C、C++和其他多种编程语言的程序调试,支持在程序运行时进行逐行执行、设置断点、查看和修改变量值、跟踪函数调用、检查内存使用情况以及分析程序崩溃原因等功能。
GDB 允许开发者深入到程序的内部运行状态中,这对于发现和修复代码中的错误至关重要。它通过与被调试程序的交互,提供了丰富的命令集来控制程序的执行流程,同时还可以读取并解析由编译器生成的调试信息(通常在编译时通过
-g
选项启用),以便展示源代码级别的调试细节,而不仅仅是汇编或机器码。GDB 可以在各种操作系统平台上运行,特别是在 Unix-like 系统(如 Linux、macOS)上被广泛使用,同时也有针对 Windows 平台的移植版本。它是开发人员在软件开发周期中进行代码调试时不可或缺的工具之一。
1.5 Unix
UNIX 是一个历史悠久、非常成熟的操作系统家族,最初由贝尔实验室的研究人员在1960年代末至1970年代初开发。它设计初衷是为了方便研究人员进行软件开发和系统管理。UNIX 提供了一个强大的命令行界面,支持多任务、多用户操作,并且具有高度的稳定性和可靠性。因其设计精良和理念先进,UNIX 成为了现代操作系统设计的基石,影响了许多后续操作系统的开发。
UNIX 系统包括许多商业版本,如 Solaris(由Sun Microsystems开发)、AIX(IBM的产品)、HP-UX(惠普开发)等,以及一些学术和研究机构使用的版本,如伯克利软件发行版(BSD)系列。由于其早期的授权政策较为严格且费用高昂,促使了开源替代品的发展,其中最著名的就是Linux。
1.6 Linux
Linux 是一个基于 UNIX 设计思想的操作系统内核,由林纳斯·托瓦兹(Linus Torvalds)在1991年首次发布。Linux 内核是自由和开放源代码的,任何人都可以免费获得其源代码、使用、修改和重新分发。这一特性极大地促进了其在全球范围内的普及和发展。
Linux 系统通常指的是基于 Linux 内核,搭配各种 GNU 工具和应用程序、窗口系统(如X Window System或者Wayland)、桌面环境(如GNOME、KDE)等组成的一个完整的操作系统。由于其开源特性,存在许多不同的Linux发行版,如Ubuntu、Debian、Fedora、Red Hat Enterprise Linux、openSUSE、Arch Linux等,这些发行版针对不同的用户群和应用场景进行了定制化。