Makefile文件的使用和编写(进阶)

Makefile的复杂案例

上文通过一个简单的介绍了Makefile文件的编写使用,本篇文章通过一个比较复杂的例子来加深对makefile的理解。
Makefile文件编写的优势就是不需要重复的写大量的命令行,减少工作量同时减低错误率。所以就用多文件链接来作为例子。

案例

在这里插入图片描述
文件包含关系为
在这里插入图片描述
把foo.c ,bar.c, main.c,这三个文件进行链接生成main可执行文件
一般情况下会把除main函数外的文件先用gcc -c filename 指令生成 .o 文件,再和main函数进行连接。
在这里插入图片描述
这样做的好处是:当只改变了foo.c文件,foo.o需要重新生成,但是bar.o文件没有改变,不需要重新进行编译,节省了时间。
在这里插入图片描述
在这里插入图片描述

编写Makefile文件

在这里插入图片描述
解释:

  • 写一个我们要生成可执行文件的代码main,然后main里面有3个依赖文件,main.c,bar.o,foo.o。main.c文件已经存在,不需要生成。但是bar.o和foo.o不存在需要写一段代码来执行生成.o文件。其中生成foo.o文件需要foo.c文件,所有foo.c文件是生成foo.o代码的依赖文件。bar.o的生成和foo.o是一样的过程。最后就是写一个clean的删除文件操作,*.o表示所有后缀为.o的文件。
  • 运行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

生成了.o文件和最终需要的可执行文件main
在这里插入图片描述
在这里插入图片描述
通过make clean 删除了.o文件和main文件。

Makefile执行的过程

首先读取main标签,有3个依赖文件main.c,bar.o,foo.o。然后会跳到生成依赖文件的代码段,如foo.o就会跳到foo.o标签处。
为了读者理解,这里用一个例子

Makefile执行过程案例

在这里插入图片描述
这里有2个主函数,需要生成2个和执行文件main_bar和main_foo
按照上面的编写思路得到的Makefile代码为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到make以后识别了main_foo标签,根据该标签的依赖文件foo.o跳转到了foo.o标签执行。没有执行main_bar标签。

那么要如何生成多个可执行文件呢

上面我们可以看出,读取标签后对根据标签的依赖文件进行查找对应标签执行,只要我们把上面两个标签作为依赖文件就可以执行到这两个标签,具体代码如下
在这里插入图片描述
执行结果
在这里插入图片描述
在这里插入图片描述

Makefile编写的其他技巧

在这里插入图片描述
上面可以看出经常出现gcc,当我们需要改变编译器时就需要一处一处改,太浪费时间,这时我们可以通过定义变量的方法来解决这个问题
在这里插入图片描述
用$符号来访问字符串,-c -l -g 这些字符也可以用字符串来表示
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuming先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值