目录:

一:GNU

二:MSYS2

三:GNU与MSYS2的关系

四:Unix

五:Make

六:小问题

一,GNU(GNU's Not Unix)

GNU 是一个自由软件项目,它的目标是构建一个完全自由的操作系统。这个操作系统包括了许多开发工具(如编译器、调试工具、编辑器等),大部分是用来开发和构建软件的。

GNU Make 是 GNU 项目中的一个核心工具,通常用于自动化构建过程,尤其是在 C、C++ 等语言的编译过程中。

GNU 还开发了其他很多重要工具,如 GCC(编译器)、GDB(调试器)等,这些工具在很多类 Unix 系统中都广泛使用。

GNU Make 是 GNU 项目提供的 Make 实现

二,MSYS2

MSYS2(Minimal SYStem 2)是一个为 Windows 提供类 Unix 环境的项目,它通过提供一个类似 Linux 的命令行界面来帮助开发者在 Windows 上构建和使用 Unix 工具链。

MSYS2 本质上是一个软件包管理系统(基于 pacman),它使得 Windows 用户能够方便地安装和使用包括 GNU 工具(如 GNU Make、GCC、GDB 等)在内的许多 Unix/Linux 系统上的工具。

简单来说,MSYS2 是在 Windows 上运行的一个类 Unix 环境,允许你使用 GNU 工具(如 make、gcc 等),让你能够像在 Linux 或 macOS 上一样开发和构建软件。

三,GNU和MSYS2的关系

GNU 工具链 是 MSYS2 环境的一部分,它通过 pacman 包管理器安装 GNU 软件包(如 GNU Make、GCC 等),从而让开发者可以在 Windows 环境中使用这些工具,进行源代码编译和构建。

四,Unix

①概念:

Unix 是一种多用户、多任务、分时操作系统。

②Unix 的特点

Unix 系统有一些重要的设计哲学,以下是它的几个核心特点:

1. 多用户和多任务:
  • 多用户:Unix 支持多个用户同时登录并使用系统,每个用户有自己独立的环境和权限。

  • 多任务:Unix 能够同时运行多个程序和任务,每个任务之间相互独立。

2. 命令行界面:
  • Unix 的操作界面主要是命令行界面(CLI)。用户通过输入命令来执行各种操作。虽然图形用户界面(GUI)在后期也被引入,但 Unix 的核心设计始终围绕着命令行操作展开。

3. 文件系统:
  • 一切皆文件:在 Unix 中,几乎所有的东西都是文件,包括硬件设备、进程、甚至套接字和管道。文件系统采用层级结构,根目录下有多个子目录,用户数据和系统数据通常位于不同的目录下。

  • Unix 的文件系统非常稳定和可靠,支持权限控制,保证了用户数据的安全。

③Unix 与类 Unix 系统

很多操作系统都受到了 Unix 的启发或者直接源自 Unix,这些操作系统被统称为 类 Unix 系统。常见的类 Unix 系统有:

  1. Linux:一个开源、免费的类 Unix 操作系统,受到 Unix 的极大影响,是目前最流行的服务器操作系统之一。

  2. macOS:苹果的桌面操作系统,基于 Unix(BSD)开发,提供了图形化界面和许多 Unix 工具。

  3. BSD 系列(FreeBSD、OpenBSD、NetBSD):这些操作系统是基于 Unix 的 BSD 版本,是 Unix 的一个重要变种,广泛用于服务器和嵌入式系统。

五、make

①make概念

make 是一个 自动化构建工具,它的主要作用是 管理和自动化程序的编译和构建过程,尤其适合多文件、多模块的项目。

简单来说,make 可以:

  1. 自动判断哪些文件需要重新编译
    根据源文件和头文件的修改时间,make 只会编译被修改的文件,避免重复劳动。

  2. 执行编译和链接命令
    通过 Makefile(构建规则文件),make 知道如何把源代码(比如 C/C++ 文件)编译成对象文件,再链接成可执行程序。

  3. 管理项目依赖
    可以自动处理文件之间的依赖关系,比如一个 .cpp 文件依赖某个 .h 文件,修改头文件时相关 .cpp 文件会被重新编译。

②关于make的简单版理解

make 是一个 工具,用来 自动帮你把程序编译好。

假设你写了程序,有很多 .cpp 或 .c 文件,要生成可执行程序。如果手动编译,每次都要敲很多命令,非常麻烦,而且容易出错。

make 就像一个 “聪明的助手”:

  • 它知道哪些文件改过,哪些文件没改

  • 它只重新编译需要修改的部分

  • 自动运行你写好的编译命令,把所有东西整合成可执行文件

make 的“大脑”是一个叫 Makefile 的文件。

这个文件里写着:

  1. 目标(target) —— 你想得到的东西,比如最终程序 program

  2. 依赖(dependency) —— 生成目标需要哪些文件,比如源代码和头文件

  3. 命令(command) —— 生成目标需要执行的命令,比如编译命令 g++

为什么 C++ 项目离不开 make?
  • C++ 项目可能有很多源文件

  • 手动写编译命令容易忘记或写错

  • 改了一个小文件,不用全部重新编译

  • 可以自动化管理依赖关系,让整个流程更高效

六、小问题

为什么在 Windows CMD 里不用安装 gnuwin32.make,也能用 MSYS2 的 Make

核心概念 1:PATH 环境变量

  • PATH 是 Windows 系统的一个环境变量,用来告诉操作系统:
    “当你在命令行输入一个命令时,从哪些目录去找对应的可执行程序。”

核心概念 2:MSYS2 的 Make

  • MSYS2 自带的 make.exe 位于:

D:\app\msys2\usr\bin\make.exe
  • 当你在 MSYS2 终端 里输入 make:

    • 终端会去 /usr/bin 下找 make.exe,找到后执行。

  • 当你在 Windows CMD / PowerShell 里输入 make:

    • 系统会去 PATH 列表里的每个目录找可执行文件。

    • 由于 MSYS2 安装时或者你手动配置时,把 D:\app\msys2\usr\bin 加入了系统 PATH。

    • 所以 CMD 也找到了 make.exe 并执行了它。

核心概念 3:gnuwin32.make 的作用

  • gnuwin32.make 是一个 Windows 原生的 GNU Make 安装包。

  • 作用是:如果你没有 MSYS2 或 MinGW,你也可以在 Windows 上使用 make。

  • 但是如果你已经有 MSYS2 的 Make,并且 PATH 配置正确,不需要再安装 gnuwin32.make。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐