Makefile 知识点记录

Makefile 知识点记录

1. 依赖类型:normal Prerequisites,order-only prerequisites
normal Prerequisites:标准依赖具有两层含义的声明,一 它声明了方法运行的顺序,所有依赖的的方法必须在对象的方法运行之前运行完。二 它声明了对象的依赖关系,如果有任何依赖比对象新,那么目标对象就认为是过期的,必须要重建。
order-only prerequisites:顺序依赖,只取标准依赖的声明一。它只声明顺序关系。不会因为依赖的时间戳的更新而重建。
标准依赖和顺序依赖的声明方式如下

targets : normal-prerequisites | order-only-prerequisites

依赖之间用管道符号分隔,左边的是标准依赖,右边的是顺序依赖。
例子:

OBJS := date_test

.phony: all clean

all: $(OBJS)

$(OBJS): date.c  | version
	$(CC) -o $@ $<

version:
	date | xargs echo > version

clean:
	rm -f $(OBJS) version

上面的例子中,编译对象依赖于version,但是不会因为向version中手动添加记录而导致后边的重新编译。 date.c 是标准依赖, version是顺序依赖。
2. make 的参数传递
make 传递的时候,可以放在make前边,也可以放在make后边。 但是放在后边会出现问题,最后在执行时,make后边的参数是最后赋值的。
如下例子,所以make传递参数的时候,一定要放在前边。

.pthony: all
P_before += -I
P_after += -I./

all:
	@echo $(P_after)
	@echo $(P_before)

执行P_before=hello make P_after=world all
结果:
world
hello -I
只有放在make前边,才跟我们预想的结果一致。

你可能感兴趣的:(Linux,tools)