makefile基础

在这里插入图片描述
在这里插入图片描述
make的工作流程:
1.make 会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2.如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会
找到“main”这个文件,并把这个文件作为最终的目标文件。
3.尝试更新Makefile中第一条规则的目标main,第一条规则的目标称为缺省目标,
只要缺省目标更新了就算完成任务了,其它工作都是为这个目的而做的。
4.由于我们是第一次编译,main文件还没生成,显然需要更新,但规则说必须先
更新了main.o、stack.o和maze.o这三个条件,然后才能更新main。
5.查找以这三个条件为目标的规则,这些目标文件也没有生成,也需要更新,所以
执行相应的命令(gcc -c main.c、gcc -c stack.c和gcc -c maze.c)更新它们。
6.最后执行gcc main.o stack.o maze.o -o main更新main。

小结:make 会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make 就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make 根本不理。make 只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

make如何做到只重新编译修改过的?
1.make仍然尝试更新缺省目标,首先检查目标main是否需要更新,这就要检查三
个条件main.o、stack.o和maze.o是否需要更新。
2.make会进一步查找以这三个条件为目标的规则,然后发现main.o和maze.o需要
更新,因为它们都有一个条件是maze.h,而这个文件的修改时间比main.o和
maze.o晚,所以执行相应的命令更新main.o和maze.o。
3.既然main的三个条件中有两个被更新过了,那么main也需要更新,所以执行命
令gcc main.o stack.o maze.o - o main更新main。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Makefile基础语法包括以下几个部分: 1. 编译规则:Makefile中的编译规则指定了目标文件的依赖关系和生成方式。通常的语法格式是: targets : prerequisites command 其中,targets是规则的目标,可以是标签、可执行文件或中间文件;prerequisites是依赖文件,即生成targets所需要的文件或目标;command是需要执行的命令,可以有多条,每一条占一行。 2. 变量定义:Makefile中可以定义变量来存储一些常用的值或路径。变量的定义格式是: variable_name = value 在后续的命令或规则中,可以通过$(variable_name)来引用该变量。 3. 通配符使用:Makefile支持使用通配符来匹配文件,常用的通配符有星号(*)和百分号(%)。星号表示匹配任意长度的任意字符,百分号则表示匹配任意长度的任意字符序列。 4. 目标文件搜索:Makefile中可以通过设置VPATH来指定目标文件的搜索路径。VPATH变量可以包含多个目录,Makefile会在这些目录中搜索依赖文件。 5. 伪目标:伪目标是一种特殊的目标,它并不对应真实的文件。在Makefile中定义伪目标可以用来执行一些特定的操作或命令。通常使用.PHONY来指定伪目标。 6. 条件判断:Makefile支持条件判断,可以根据不同的条件执行不同的命令或规则。常见的条件判断语句有if、ifdef、ifndef等。 7. 常用函数:Makefile提供了一些常用的函数,用于字符串处理或变量操作。例如,$(subst old,new,text)用于将文本中的old替换为new。 8. 命令执行:Makefile中的命令可以通过反斜杠(\)来换行,以便提高可读性。 这些是Makefile基础语法,通过合理使用这些语法,可以编写一个灵活可靠的Makefile文件来管理工程的编译和链接过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值