makefile

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 $@
发布了16 篇原创文章 · 获赞 37 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章