1. makefile规则
目标:依赖
[tab]命令
或者
目标:依赖 ;命令
【目标】:目标可以是一个文件/标签。可以有多个目标,多个目标之间用空格分开,支持通配符。
【依赖】:依赖可以是一个文件/目标
【命令】:任意shell命令。命令如果不和目标/依赖在同一行,那么必须以tab开头;如果在同一行,那么用分号做分隔。如果命令太长,可以用反斜杠\作为换行符。
只要依赖比目标新,命令就会重新执行。
2. 变量
2.1 定义
变量名 = 值
2.2 引用变量
$(变量名)
3. include其他makefile文件
可以使用include命令,格式:include 文件名
4. 通配符
makefile支持三种通配符:*/?/~
*:通配符
?:自动化变量
~:home目录
5. 文件搜寻
5.1 默认搜寻路径
Makefile默认搜寻路径是当前路径
5.2 VPATH指定路径
当给VPATH指定了路径时,当前路径还是会优先搜寻。VPATH的写法如下:
多个路径之间用冒号:分隔,上面就是给定了两个路径:src和../headers
5.3 vpath指定路径
注意,这里的vpath是全小写,它比VPATH更加灵活,能够为不同文件指定不同的搜索路径,例如:
上面的意思是:当在当前目录下没找到.h文件时,就在../headers这个目录下搜寻所有.h文件。其中,%表示匹配0或若干字符。
6. 伪目标
前面说过,target可以是一个文件或者标签。默认情况下,target会生成一个文件,但有时我们并不需要生成一个文件,此时就需要将target设置为一个伪目标。例如:
通过.PHONY这个特殊的标记,我们就把clean这个target设置成了一个伪目标。
7.目标有多个依赖
多个依赖之间用空格隔开
例如:run:comp ncrun
7.1 引用变量
语法:$(变量名)
举例:
tc:=test
cmp:
vcs $(tc).sv