Kei*_*ita 8 c unix macos bash makefile
我在网上看到了以下Makefile(这里):
hello:
clean:
$(RM) hello
Run Code Online (Sandbox Code Playgroud)
当与Makefile在同一目录中存在hello.c文件时make,终端构建hello可执行文件中的命令.当make clean运行时,hello可执行被删除rm -f hello,而不是.所以,$(RM) hello就rm -f hello在这里.
这是一个Makefile变量.有显式变量(在Makefile中定义)或隐式变量(由make定义,可以由你覆盖).
隐式变量列表可以通过以下方式找到:
make -p
Run Code Online (Sandbox Code Playgroud)
一些最常见的变量可以在以下位置找到:10.3隐式规则使用的变量
您可以通过$(NAME)或扩展变量${NAME}
$(RM)是对"make"变量(或POSIX术语中的宏)的引用.它们有两种语法风格,具有相同的语义:$(NAME)和${NAME}(并且有一个字母宏不需要括号,例如$a).
POSIX指定许多变量,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
Run Code Online (Sandbox Code Playgroud)
有趣的RM是,不是其中之一.RMmake实现中变量的默认值显然是rm -f(并且默认情况下,make以非POSIX模式运行).
请注意,虽然它$(PWD)具有与shell命令替换相同的语法(和${PWD}shell参数相同),但它们完全不同.要回答您的问题,不,您不能指望$(PWD)作为"make"宏来运行该pwd实用程序或扩展到当前工作目录.一个未定义的宏将扩展为一个空字符串,而"make"甚至不会抬起眉毛.