Makefile的常用语法

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

8. 显示工作路径

8.1 显示当前工作路径

8.2 显示当前工作路径的前一级目录

makefile 实例分析 Makefile 语法分析 第一部分 VERSION = 2# 给变量VERSION赋值 PATCHLEVEL = 6# 给变量PATCHLEVEL赋值 SUBLEVEL = 22# 给变量SUBLEVEL赋值 EXTRAVERSION = .6# 给变量EXTRAVERSION赋值 NAME = Holy Dancing Manatees, Batman!# 给变量NAME赋值 # *DOCUMENTATION*# To see a list of typical targets execute "make help"# More info can be located in ./README# Comments in this file are targeted only to the developer, do not# expect to learn how to build the kernel reading this file. # Do not:# o use make's built-in rules and variables#    (this increases performance and avoid hard-to-debug behavour);# o print "Entering directory ...";MAKEFLAGS += -rR --no-print-directory# 操作符“+=”的作用是给变量(“+=”前面的MAKEFLAGS)追加值。# 如果变量(“+=”前面的MAKEFLAGS)之前没有定义过,那么,“+=”会自动变成“=”;# 如果前面有变量(“+=”前面的MAKEFLAGS)定义,那么“+=”会继承于前次操作的赋值符;# 如果前一次的是“:=”,那么“+=”会以“:=”作为其赋值符# 在执行make时的命令行选项参数被通过变量 “MAKEFLAGS”传递给子目录下的make程序。# 对于这个变量除非使用指示符“unexport”对它们进行声明,它们在整个make的执行过程中始终被自动的传递给所有的子make。# 还有个特殊变量SHELL与MAKEFLAGS一样,默认情况(没有用“unexport”声明)下在整个make的执行过程中被自动的传递给所有的子make。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值