编写Recipe
规则中的recipe
由一条或多条shell
命令组成, 并会按照顺序执行。
通常,这些命令执行的结果就是更新target
。
Linux用户可以使用多种不同的shell
程序,但Makefile
中的recipe
是由/bin/sh
来解释。
Recipe
语法
Makefile
最不同寻常的是一个文件中有两种语法。大部分内容都是用的是make
语法,但是recipe
是由shell
来解释的,因此需要使用shell
语法编写。
make
不需要解释shell
语法,只需要将recipe
翻译之后传递给shell
即可。
recipe
的每行都以tab
或.RECIPEPREFIX
变量指定的字符开始。处于规则上文中,并以tab
开始的行会被当做规则的recipe
。空行或注释行可以出现recipe
中,但是会被忽略。
在规则中的recipe
有以下方式:
- 以
tab
开头的空行不是空白,而是一个空的recipe
。 recipe
中的注释不是make
注释,是否是注释需要有执行的shell
来决定。- 规则上文中的以
tab
开头的行中的变量定义会被当做recipe
的一部分,而不是make
变量定义,会被传递给shell
。 - 规则上文中的以
tab
开头的行中的条件表达式(如ifreq
和ifeq
)会被当做recipe
的一部分,传递给shell
。
分离recipe
行
make
会检查recipe
每行的换行符之间是否有\
,如果有\
,那么会将其当做单个配方行,并将调用一个shell
实例来运行。
all :
@echo no\
space
@echo no\
space
@echo one \
space
@echo one\
space
# make会将其当做下面四条shell命令
nospace
nospace
one space
one space
配方中使用变量
- 原文作者:生如夏花
- 原文链接:https://blduan.top/post/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7/makefile/%E7%BC%96%E5%86%99recipe/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。