我在线看到以下makefile(在此):
hello:
clean:
$(RM) hello
当同一目录中有一个Hello.c文件时,terminal builds builds builds build hello
可执行文件中的 make
命令。当运行make clean
时,hello
可执行文件将由rm -f hello
删除。因此,$(RM) hello
在这里表示rm -f hello
。
- $(foo)是什么意思?它是makefile的特殊语法还是bash命令?
- 我可以运行其他命令以及$(RM),例如$(PWD)?
这是一个makefile变量。有明确的变量(在makefile内定义了)和隐式变量(由您定义,可以由您覆盖)。
您可以看到此标志的隐式变量列表:
make -p
可以找到一些最常见的变量,请访问:10.3使用隐式规则使用的变量
您可以使用语法$(NAME)
或${NAME}
$(RM)
是对" make"变量(或posix lingo中的 acro )的引用。这些具有两个语法风味,具有相同的语义:$(NAME)
和${NAME}
(并且有一个字母宏不需要括号,例如$a
)。
posix指定许多变量,errrrr, macros ,具有默认值:
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
(默认情况下以非Posix模式运行)。
请注意,尽管$(PWD)
具有与shell命令替换相同的语法(并且${PWD}
与shell参数相同),但它们是完全不同的。为了回答您的问题,不,您不能指望$(PWD)
作为"制作"宏来运行pwd
实用程序或扩展到当前工作目录。一个未定义的宏将被扩展到一个没有"使"眉毛的空字符串。
这是一个make file变量。以前或在您的env中,您的RM="rm -f"
语法取决于外壳或在制造本身中,现在您只是在执行。
您可以运行pwd
,但是要使用$(PWD)
,您需要设置PWD="pwd"
。