make的特殊之处

时间:2022-12-27 16:01:09

1 规则的先后顺序问题

规则的先后顺序只会影响默认的目标,没有其它的影响。

2 make对具有相同目标的规则的处理方式

2.1 如果是单冒号

只能有一个规则是有命令的,然后对它们进行合并,即依赖合并。

2.2 如果是双冒号

分别单独处理,顺序按照makefile中的顺序。这种情况下,只有各个规则的命令是独立才是有意义的。

3 make对模式规则和非模式规则匹配的先后顺序

 

4 通配符扩展的时机

4.1 不会扩展的情况

第一,定义变量的时候

第二,作为函数的参数的时候

4.2 会自动扩展的情况

在命令中。

4.3 通配符扩展函数wildcard

$(wildcard *.c)

4.4 问题

在目标和依赖中的通配符呢,会自动扩展吗?

5 没有依赖和没有命令的目标作为别人的依赖使用

当没有依赖和没有命令的目标作为别人的依赖使用时,该“别人”目标总是会被重新构建。

6 静态模式规则

静态模式规则是相对于模式规则而言的。

静态模式规则有两个冒号,它指定了明确的目标,然后通过目标模式去匹配依赖模式,从而找到相应的依赖。它是一种自动确定依赖的方法。

而模式规则不光自动确定依赖,还自动确定目标。

7 make的条件判断的特殊之处

其它语言的条件判断是控制执行流的,但是makefile的条件判断并不是控制执行流的,它是控制makefile对make的可见性的,如果条件不满足,那么make就看不到makefile被条件包裹的部分。

8 无论rules的recipe怎么写,recipe的每行前面都必须是tab键,而不能是空格,否则make不能识别。