make/Makefile -基本使用

一、make/Makefile 的认识

我们一般使用 Visual Studio(下面简称 VS)时,它会帮我们自动链接文件。100 个源文件,通常会将它们都编译形成 .o 文件,然后全部链接,形成一个可执行程序,VS 自动将各个源文件编译,然后链接了,不用我们操心了。
make/Makefile 就是 Linux 项目的自动化构建工具。

make

make 是一个命令。
在这里插入图片描述

Makefile

Makefile 是一个文件。
是在自己当前目录下需要手动构建的一个文件,保存的是依赖关系和依赖方法。

  • 依赖关系:
    指的是:“ 为什么要帮你?”
    语法:左侧是目标文件,右侧是依赖文件列表。
mytest:mytest.c
  • 依赖方法:
    指的是:“ 怎么帮你?”
    语法:最开始加一个 Tab,然后写方法即可。
	gcc -o mytest mytest.c

二、make/Makefile 基本使用

创建项目

  • 首先创建一个源文件和 makefile 文件
    在这里插入图片描述
    注意: 必须叫 makefile (首字母大小写都可以),因为 make 指令只认识 makefile/Makefile

  • 添加依赖关系和依赖方法
    通过 vim 打开 makefile 文件并进行编辑,添加上依赖关系和依赖方法。
    (如果对 vim 的使用不熟悉,可以翻翻下面这篇文章:vim模式及部分操作)
    在这里插入图片描述
    注意: 依赖方法那行开头要空一个 tab

  • 编辑源文件
    我们为了查看效果,简单写一小段代码:

#include<stdio.h>
int main()
{
	printf("hhhhh\n");
	return 0;
}
  • 外部 make
    在这里插入图片描述
    通过make指令,我们发现它自己实现了 gcc -o mytest test.c 的命令操作,生成了 mytest 可执行程序。
    再次make:
    在这里插入图片描述
    紧接着 make ,发现有提示,表明源文件已经是最新的了。
    源文件没有改动,即使make ,也不会重新编译,源文件改动了,make 才会重新编译。
    另一种方法是使用 .PHONY 修饰目标文件,使其成为一个伪目标,总是被执行。

在这里插入图片描述

清理项目

  • 添加依赖关系和依赖方法

在这里插入图片描述
这个的依赖文件列表为空,不需要依赖任何文件。

  • 外部 make clean
    在这里插入图片描述
    执行 clean 下的代码,删掉了 mytest 文件。
    清理这部分建议用 PHONY 修饰,以保证不管什么情况下,总能执行清理工作。

在这里插入图片描述

make 指令的使用

从上面我们可以看到在编译部分我们使用的是 make ,而清理部分我们使用的是 make clean
其实,make 形成目标文件的时候,默认是从上到下扫描 makefile 文件的,默认形成的是第一个目标文件,所以第一个可以直接使用 make
比如我们将上面的 gccrm 两条指令换个位置:

在这里插入图片描述
结果如下:
在这里插入图片描述
make 指令变成了操作 rm 的指令,而操作 gcc 的指令必须通过 make mytest 来执行。

三、makefile 的几个语法

关键字 PHONY :

修饰目标文件为伪目标,使其总是被执行。

  • 一般不把源文件设置为伪目标
    每次都重新编译,会降低效率:当源文件过多、过大,每次都重新编译,效率降低;如果一个两个源文件出错,每次都全部重新编译,效率也会低。
  • 一般把 clean 设置成伪目标
    可以保证不管什么情况下,总能执行清理工作。

$ :

$@:代表目标文件,$^:代表依赖文件

在这里插入图片描述

变量 :

在开头定义,且等号左右不能加空格,使用时用 $ 引出。
在这里插入图片描述

四、makefile的语法推导过程

make执行一条指令时,先看当前的依赖方法,依赖方法没有办法实现的话,会递归向下,直到能够完成最初的依赖方法,再逆向执行依赖方法,这属于一条指令。
在这里插入图片描述
指向结果:
在这里插入图片描述
可以看到make指令是从最下面一条指令开始执行的,直到向上执行生成了 mytest 文件。


本文到这里就结束了,如果对您有帮助,希望给一个赞哦!🌷
如有错漏,欢迎指正!😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值