makefile

2 篇文章 0 订阅

makefile rules

1.target

Makefile basic grammar:

target: prerequisites
	command

target 是编译目标,在编译的时候输入“make target”就可以执行 target 的规则。target既可以是目标文件,也可以是可执行文件,还可以使一个标签,如前面的 all
prerequisites 是依赖关系文件,即生产 target 所需要的文件或者目标。
command 是生成 target 所需执行的命令。

2.false-target

makefile

all:
	gcc name.c
.PHONYL:all	

.PHONY:all is false-target .

3.self define variable

make 支持在 Makefile 文件中定义变量。合理使用变量,能增强 Makefile 文件的通用性,
并简化 Makefile 文件编写。
一般的Makefile 文件编写中,通常会为源文件、可执行文件以及编译参数等分别定义
一个变量,并予以赋值,在编译规则中则直接引用这些变量。
变量的定义和赋值方法通常是:

VAR=value

在这里插入图片描述

4.makefile 变量

在这里插入图片描述
在这里插入图片描述
这个 Makefile 和前面看到过的相比,增加了几点内容:
(1) 增加了目标和依赖;
(2) 编译多个 c 文件,多个文件用空格隔开;
(3) 使用了自动变量。
在这里插入图片描述

5.隐式规则和显式规则

再回头看图 10.31 和图 10.33 的范例的 EXE:$(OBJ),EXE 依赖于 OBJ,但是整个
Makefile只定义了 EXE 的生成规则,并没有给出 OBJ 的生成规则。可是怎么编译却没有出
错呢?
这是因为 make 有一些既定的目标生成规则,称之为隐式规则。例如对于一个 file.o
件,make 会优先寻找同名的 file.c 文件,并按照 gcc -c file.c -o file.o 的编译规则生成 file.o
文件。对于不同语言,有不同的隐式规则,所以一般来说,不推荐用隐式规则。
显式规则是用户自定义的规则。在使用隐式规则有隐患的情况下,更应当使用显式规则,
明确指定生成规则。例如前面提到的隐式规则,用显式规则来定义可为:

OBJ:$(SRC)
$(CC) -o $(OBJ) -c $^

如果不用自定义变量,还可以这么写,也称为模式规则:

%.o:%.c
$(CC) -o $(OBJ) -c $@
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值