带你掌握 Makefile 分析

摘要:Makefile 是一个名为 GNU-Make 软件所需要的脚本文件,该脚本文件可以指导 Make 软件控制 arm-gcc 等工具链去编译工程文件最终得到可执行文件,几乎所有的 Linux 发行版都内置了 GNU-Make 软件,VScode 等多种 IED 也内置了 Make 程序。

什么是 Makefile

Makefile 是一个名为 GNU-Make 软件所需要的脚本文件,该脚本文件可以指导 Make 软件控制 arm-gcc 等工具链去编译工程文件最终得到可执行文件,几乎所有的 Linux 发行版都内置了 GNU-Make 软件,VScode 等多种 IED 也内置了 Make 程序。

你见到的 xxx.mk 文件或者 Makefile 都统称为 Makefile 脚本文件。

Makefile 脚本文件的语法学习可以参考

https://www.gnu.org/software/make/manual/make.html (GNU make 官方文档)

https://seisman.github.io/how-to-write-makefile/overview.html (跟我一起写 Makefile 陈皓)

Makefile 的规则

Makefile 的规则如下,这里的[TAB]指键盘上的 TAB 按键,不是空格,如果在命令前输入了空格则会造成错误,并且在 Makefile 中 TAB 键不能随意使用:

目标 : 依赖

[TAB]命令

例如:

Hello :

@echo “Hello”

这时执行 make 命令就会输出一条语句”Hello”,Hello 是目标,依赖为空,为了生成目标,需要执行 echo “Hello”语句,从而导致输出 Hello。

例如:假设我们有一个 Hello.c C 语言源文件,需要将其编译不链接为 Hello.o 文件,最后在进行连接,Makefile 内容如下:

Hello.out : Hello.o

gcc -o Hello.out Hello.o

Hello.o : Hello.c

gcc -c -o Hello.o Hello.c

这时执行 make 命令,make 解释器发现目标为“Hello.out”,但是生成 Hello.out 需要 Hello.o,发现目录下找不到“Hello.o”,就向下查找是否有生成 Hello.o 的规则,找到了,发现”Hello.o”依赖于”Hello.c”,在目录下也找到了 Hello.c,就执行语句“gcc -c -o Hello.o Hello.c”生成”Hello.o”,只要编译过程不出错,即可得到”Hello.o”,这时可以执行“gcc -o Hello.out Hello.o“生成”Hello.out”

哪里开始分析?

这里可以用分析一个 C 语言或 Java 语言程序来类比,一般都是根据程序是执行流来进行分析,也就是先找到 main 函数,因为 main 函数是程序的执行入口,Makefile 也有执行入口,在执行 make 命令时,make 解释器默认搜索当前目录下名为“Makefile”的文件,找到后,执行生成第一个目标的命令及生成其依赖所需的命令。

这里选择在 SDK/Targets 目录中 STM32

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值