3.1 一个Makefile所包含的内容

一、一个Makefile的内容

假设我们有一个简单的Makefile用于编译C程序。下面是一个示例:

# 变量定义
CC = gcc
CFLAGS = -Wall -g

# 显式规则
main: main.o func.o
    $(CC) $(CFLAGS) -o main main.o func.o

# 隐式规则
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

# 指令
clean:
    rm -f main *.o

# 注释
# 这是一个简单的Makefile,用于编译C程序

在上述示例中,我们可以看到以下五种内容:

  1. 变量定义:定义了CCCFLAGS两个变量,分别表示编译器和编译选项。
  2. 显式规则:定义了一个显式规则,指定了如何生成main目标文件。它依赖于main.ofunc.o这两个先决条件。当执行make main命令时,会执行相应的命令将目标文件生成或更新。
  3. 隐式规则:定义了一个隐式规则,描述了如何根据.c文件生成对应的.o目标文件。例如,当执行make main.o命令时,会自动根据main.c文件生成main.o文件。
  4. 指令:定义了一个名为clean的指令,用于清理生成的目标文件和中间文件。当执行make clean命令时,会执行相应的命令删除main文件和所有.o文件。
  5. 注释:通过使用#字符开头的行来添加注释,可以提供对Makefile的解释和说明。在示例中,我们添加了一条注释来说明这是一个简单的Makefile用于编译C程序。

以上就是示例中包含的五种内容:变量定义、显式规则、隐式规则、指令和注释。它们在Makefile中起到不同的作用,用来控制程序的编译和构建过程。

二、五种内容的详细介绍

Makefiles包含五种内容:显式规则、隐式规则、变量定义、指令和注释。规则、变量和指令详细描述:

  • 显式规则:指定何时以及如何重新生成一个或多个文件,被称为目标(targets)。它列出了目标所依赖的其他文件,称为目标的先决条件(prerequisites),并且可能提供了用于创建或更新目标的命令。
  • 隐式规则:根据文件名指定何时以及如何重新生成一类文件。它描述了目标如何依赖于与目标类似的文件,并提供了用于创建或更新此类目标的命令。
  • 变量定义:是指为变量指定一个文本字符串值的行,稍后可以将其替换到文本中。简单的Makefile示例展示了一个变量定义,将objects定义为所有对象文件的列表。
  • 指令:是指让make在读取Makefile时执行一些特殊操作的指令。例如,读取另一个Makefile、根据变量的值决定是否使用或忽略Makefile的某个部分、从包含多行的原始字符串定义一个变量等。
  • 注释:在Makefile中以‘#’开始的行是注释,它及其后面的内容会被忽略。但是,如果在注释中使用反斜杠转义的非转义反斜杠,则可以跨多行继续注释。只包含注释的行(可能有空格)被视为空行,会被忽略。如果要使用字面上的#字符,需要用反斜杠进行转义(例如,#)。注释可以出现在Makefile的任何行中,尽管在某些情况下会受到特殊处理。

在变量引用或函数调用中不能使用注释:在变量引用或函数调用中,#字符将按照字面意义对待(而不是作为注释的起始),所以需要注意。

在一个命令中的注释会被传递给shell,就像其他命令文本一样。shell决定如何解释它:是否将其作为注释取决于shell本身。

在define指令内部,注释在变量定义过程中不被忽略,而是保留在变量值中。当扩展变量时,根据上下文来决定将其视为make注释还是命令文本。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MrWang.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值