C- makefile语法:什么是$(RM)



我在线看到以下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"

相关内容

  • 没有找到相关文章

最新更新