我在网上看到了以下Makefile(here):
hello:
clean:
$(RM) hello
当与Makefile在同一目录中存在hello.c文件时,终端构建make
可执行文件中的hello
命令。运行make clean
后,hello
会删除rm -f hello
可执行文件。因此,$(RM) hello
在此处表示rm -f hello
。
答案 0 :(得分:7)
它是一个Makefile变量。有显式变量(在Makefile中定义)或隐式变量(由make定义,可以由你覆盖)。
隐式变量列表可以通过以下方式找到:
make -p
一些最常见的变量可以在10.3 Variables Used by Implicit Rules
找到您可以按$(NAME)
或${NAME}
答案 1 :(得分:6)
$(RM)
是对“make”变量(或POSIX术语中的宏)的引用。它们有两种语法风格,具有相同的语义:$(NAME)
和${NAME}
(并且有一个不需要括号的字母宏,例如$a
)。
POSIX specifies许多变量,errrrr,宏,都有默认值:
MAKE=make
AR=ar
ARFLAGS=-rv
YACC=yacc
YFLAGS=
LEX=lex
LFLAGS=
LDFLAGS=
CC=c99
CFLAGS=-O 1
FC=fort77
FFLAGS=-O 1
GET=get
GFLAGS=
SCCSFLAGS=
SCCSGETFLAGS=-s
有趣的是,RM
不是其中之一。
make实现中RM
变量的默认值显然是rm -f
(默认情况下,make在非POSIX模式下运行)。
请注意,虽然$(PWD)
具有与shell命令替换相同的语法(并且${PWD}
与shell参数相同),但它们完全不同。要回答您的问题,不,您不能期望$(PWD)
作为“make”宏来运行pwd
实用程序或扩展到当前工作目录。一个未定义的宏将被扩展为一个空字符串,而“make”甚至不会抬起眉毛。
答案 2 :(得分:1)
这是一个make文件variable。以前或在你的环境中你有task printVersions{
print "Version code is $project.android.defaultConfig.versionCode"
}
语法,具体取决于shell或者它是否在make本身,现在你只是执行。
您可以运行RM="rm -f"
,但要使用pwd
,您需要设置$(PWD)
。