Makefile文件的组成及引用其它的Makefile和make的工作方式

举报
yd_221104950 发表于 2020/12/02 23:39:13 2020/12/02
【摘要】 makefile的介绍可以参考《makefile介绍及示例》 Makefile文件由五部分组成: 显式规则:显式指出生成的目标文件、依赖的文件、生成命令。隐式规则:利用make的自动推导功能,可以简化规则的编写,参考《make命令的自动推导》。变量定义:定义一系列的变量,可以在Makefile文件其他地方引用。文件指示:包括三部分,(1)一个是在一个 Makefil...

makefile的介绍可以参考《makefile介绍及示例》

Makefile文件由五部分组成:

  1. 显式规则:显式指出生成的目标文件、依赖的文件、生成命令。
  2. 隐式规则:利用make的自动推导功能,可以简化规则的编写,参考《make命令的自动推导》
  3. 变量定义:定义一系列的变量,可以在Makefile文件其他地方引用。
  4. 文件指示:包括三部分,(1)一个是在一个 Makefile 中引用另一个 Makefile;(2)另一个是根据某些情况指定 Makefile 中的有效部分;(3)还有就是定义一个多行的命令。
  5. 注释:Makefile 中只有行注释,以 # 字符开头,如果文件中要用到#,必须进行转义:\# 。

注意:
在 Makefile 中的命令,必须要以 Tab 键开始。

引用其它的 Makefile

在Makefile 使用 include 关键字可以把其他的 Makefile 文件包含进来,被包含的文件内容会插入到包含位置。include 的语法是:

include <filename>

  
 
  • 1

filename 可以包含路径和通配符。
注意:
在 include 前面不能用Tab 键开始。

make 命令开始时,会寻找 include 包含的 Makefile文件,并将其内容插入到当前的位置。如果文件都没有指定绝对路径或是相对路径的话,make 会先在当前目录下寻找。如果运行 make 时,指定 -I 或 --include-dir 参数,make 将在参数所指定的目录下找。如果最后还是没有找到文件的话,make 会生成一条警告信息,然后继续载入其它的文件,一旦完成 makefile 的读取,make 会再重试寻找这些没有找到的文件或者是不能读取的文件,如果还是不行,make 才会出现一条致命信息。

如果你想让 make 不理那些无法读取的文件,而继续执行,可以在 include 前加一个减号“-”,如:

-include <filename>

  
 
  • 1

未使用include之前:
在编译子目录下的源文件时,需要指的路径,否则会在当前目录下找。

OBJECTS = main.o hello.o car.o ./module/radio.o
app:$(OBJECTS) gcc -o app $(OBJECTS) 
$(OBJECTS):hello.h
main.o car.o:car.h
main.o:./module/radio.h
radio.o:./module/radio.h .PHONY:clean
clean: -rm app $(OBJECTS)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

使用include之后:
把radio.o:./module/radio.h的规则放到子目录makefile文件./module/module.mk中。

OBJECTS = main.o hello.o car.o ./module/radio.o
app:$(OBJECTS) gcc -o app $(OBJECTS) 
$(OBJECTS):hello.h
main.o car.o:car.h
main.o:./module/radio.h
-include ./module/module.mk

.PHONY:clean
clean: -rm app $(OBJECTS)


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

./module/module.mk:

radio.o:radio.h

  
 
  • 1

再谈make 的工作方式

GNU 的 make 工作时的执行步骤如下:

  1. 读入所有的 Makefile。
  2. 读入被 include 的其它 Makefile。
  3. 初始化文件中的变量。
  4. 推导隐式规则,并分析所有规则。
  5. 为所有的目标文件创建依赖关系链。
  6. 根据依赖关系,决定哪些目标要重新生成。
  7. 执行生成命令。

更多参考请看: 《make命令的工作原理》

谢谢阅读

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/103118448

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。