make的使用

呆呆的猪胖胖 Lv4

前言

在学习过程中,编写的代码体量一般都不是很大,但是总有些时候,需要进行大规模的代码编写,这种时候,编译这些大体量的代码就变成了一个不是那么简单的事情,所幸还是有很多的工具能够帮助我们完成,make就是其中之一,作者正在自学make的一些知识,这里做一个简单的记录。

GNU make 官方文档

下载

在linux下进行make的下载还是比较简单的,在命令行使用包管理工具下载即可:

1
2
3
sudo apt install make
#或者可以直接安装开发工具组:
#sudo apt install build-essential
1
2
3
sudo yum install make
#或者可以直接安装开发工具组:
#sudo yum groupinstall "Development Tools"
1
2
3
sudo dnf install make
#或者可以直接安装开发工具组:
#sudo dnf groupinstall "Development Tools"

在windows下安装也是比较简单的可以直接使用scoop包管理工具进行下载:

1
scoop install make

其中scoop配置教程见本博客:
Scoop环境配置记录

或者可以直接通过安装MinGW64完成,具体的步骤见(这里的步骤保持不变即可):
C语言环境配置(最直接)

安装完成后,输入:

1
make --version

观察到正确输出版本号即可。

编写Makefile

使用make需要编写Makefile,详细的语法在官方文档中已经完全写出,可以进行查阅,下面列出一些简单的语法:

  1. 基本规则
    1
    2
    OutPutFileName:InPutFileName
    Command To Make InPutFile Become OutPutFile
    例如,想要编译一个C语言文件,假如名称为Hello.c,一般使用的命令为:
    1
    gcc Hello.c -o Hello
    这条命令中,InPutFile就是Hello.cOutPutFile就是Hello因此Makefile就可以这么写:
    1
    2
    Hello:Hello.c
    gcc Hello.c -o Hello

这里需要注意的是,Makefiel会强制要求第二行的Command由Tab制表符缩进完成,而四个空格的缩进会报错,导致无法正常的执行。
因此一定要进行调整。

Note

Vscode下可以通过底边栏将该文件的缩进字符改为Tab缩进。
首先找到如下位置:

点击空格,会弹出:

选择使用制表符缩进,会切换到:

点击长度之后会自动切换到使用制表符缩进,此时就不会再报错了。

  1. 删除某些文件
    1
    2
    3
    .PHONY:clean
    clean:
    rm -f FileName
    有些时候,编译会产生一些中间的文件,这个时候,需要清除掉,例如:
    下面的Makefile文件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #C语言编译
    #注:由于make在编译的时候,目标文件是第一个,因此下面的Makefile文件的内容看上去就好像和正常的编译顺序不同
    # 链接
    Hello: Hello.o
    gcc Hello.o -o Hello

    # 汇编
    Hello.o: Hello.s
    gcc -c Hello.s -o Hello.o

    # 编译
    Hello.s: Hello.i
    gcc -S Hello.i -o Hello.s

    # 预处理
    Hello.i: Hello.c
    gcc -E Hello.c -o Hello.i
    将会产生中间文件,有些时候需要清除这些中间文件:
    1
    2
    3
    .PHONY:clean
    clean:
    rm -f Hello.i Hello.s Hello.o

Tip

上述clean命令在Linux下是有用的,但是在Windows下执行就可能会失败,在Windows下的删除命令可能可以这么写:

1
2
rm -Force Hello.i,Hello.s,Hello.o
#-f参数在Windows下会有两个匹配,因此会报错,此外不同文件之间的连接也需要使用逗号

或者:

1
del /f Hello.i Hello.s Hello.o Hello

又或者:

1
Remove-Item -Force Hello.i, Hello.s, Hello.o, Hello

但是作者在尝试了非常多次之后,发现上述命令总会报错,在几经尝试之后,只有按照下面的方式得到的结果才是正确的:

1
powershell -Command "Remove-Item -Path @('Hello.i', 'Hello.o', 'Hello.s') -Force -ErrorAction SilentlyContinue"

对于这一问题,Windows下的读者在使用的过程中可以继续探索,作者很期待收到反馈。

知道了上述的两种方式,编写一个Makefile已经是非常简单了。

使用make

在创建一个名为Makefile的文件在当前文件夹之后,就可以直接打开命令行到当前的文件夹下输入:

1
make

之后文件就会自动编译生成,如果想要清理中间文件,也就是调用我们之前编写的clean命令,则只需要输入:

1
make clean

后记

以上就是make的简单使用方式了,掌握之后基本就可以正常的使用make了。

此外make还有许多的进阶使用方式,会在日后 进行更新的。

  • Title: make的使用
  • Author: 呆呆的猪胖胖
  • Created at : 2025-05-01 12:25:00
  • Updated at : 2025-05-13 15:34:47
  • Link: https://blog.cflmy.cn/2025/05/01/Technology/Build/Make/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments