[Linux系统编程]Makefile项目管理

      分别放在若干个目录中,makefile定义了一系列的规则 来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。–引自百科词条
往期文章链接
在这里插入图片描述

1 学习目标

      网上对于makefile总结学习文章有许多,但是大部分排版或者内容杂乱无章,所以还是自己进行一个总结学习,大家可以根据自己的阅读习惯选择适合自己的文章。
      在实例部分的代码是层层递进改变,每一次都是在之前的基础上修改。

  • 了解Make工具给我们带来的好处和便利
  • makefile的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样(重点

2 makefile概述

      make工具是一个根据makefile文件内容,针对目标(可执行文件)进行依赖性检测(要生成该可执行文件之前要有哪些中间文件)并执行相关动作(编译等)的工具 。而这个makefile文件类似一个脚本,其中内容包含make所要进行的处理动作以及依赖关系。

3 目标、依赖、处理动作的概念(重要)

      学习make工具,需要明白三个概念:目标、依赖、处理动作。makefile所要进行的主要内容是明确目标、明确目标所依赖的内容、明确依赖条件满足时应该执行对应的处理动作。例如我们最终要实现a这个目标,但是需要依赖b,而b依赖于c的存在,则可以描述为:

a:b
	cmdbtoa
b:c
	cmdctob
//---------------中文表示如下--------------
目标:依赖条件
(一个tab缩进)命令
目标:依赖条件
(一个tab缩进)命令
  • " : "代表依赖,另外每个处理动作之前都要用tab键分隔。
  • 上述四行的意思是:a依赖于b,而处理cmdbtoa;b依赖于c,而处理cmdctob。

4 makefile 基础规则

在网上一个比较好的视频学习中总结了一个口诀规则:

  1. 一个规则
  2. 二个函数
  3. 三个自动变量

4.1 一个规则的概念

  1. 目标的时间必须晚于依赖条件的时间,否则,更新目标
  2. 依赖条件如果不存在,找寻新的规则去产生依赖条件。
  3. makefile的依赖是从上至下的,换句话说目标文件是第一句里的目标,如果不满足执行依赖,就会继续向下执行。如果满足生成目标的依赖,就不会再继续向下执行了。make会自动寻找规则里需要的材料文件,执行规则下面的行为生成规则中的目标。

4.2 两个函数的概念

为了方便学习,我们可以把

  • wildcardpatsubst看做C语言的函数名。
  • srcobj 看成变量名(表示函数的返回值)
  • 函数名后面跟着的./*.c %.c, %.o看做函数的参数,根据顺序可以看做参数一、参数二、参数三
  • src = $(wildcard ./*.c): 作用:匹配当前工作目录下的所有.c 文件。将文件名组成列表,赋值给变量 src。等价于 src = add.c sub.c div1.c
  • obj = $(patsubst %.c, %.o, $(src)):作用 将参数 3 中,包含参数 1 的部分,替换为参数 2。等价于obj = add.o sub.o div1.o

4.3 三个自动变量的概念

  • $@: 在规则的命令中,表示规则中的目标。
  • $^: 在规则的命令中,表示所有依赖条件。
  • $<: 在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。

5 makefile 基础规则实例解释

5.1 一个规则演示(加减乘除多文件编译)

演示利用makefile演示多文件编译,把加减乘除的函数分别放在不同的文件中,hello.c进行调用执行。

5.1.1 代码部分

makefile

hello:hello.c add.c sub.c div1.c
	gcc hello.c add.c sub.c div1.c -o hello

hello.c

# include<stdio.h>

int add(int,int);
int sub(int,int);
int div1(int,int);
int main(int argc,char*argv[]
  • 37
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Windalove

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

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

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

打赏作者

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

抵扣说明:

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

余额充值