与Makefile混淆

与Makefile混淆,makefile,Makefile,我试图学习makefile,主要是为了理解我正在使用的makefile,但是我被一些可能很简单的事情搞砸了。使我困惑的makefile部分如下所示: SUBS = dir1 dir2 dir3 depend clean: @-X=`pwd`;\ for i in $(SUBS);\ cd $$X/$$i;\ done “@-X=pwd做什么?我推测它以某种方式将当前目录的值分配给X,但我不知道如何读取“@-”语法 另外,

我试图学习makefile,主要是为了理解我正在使用的makefile,但是我被一些可能很简单的事情搞砸了。使我困惑的makefile部分如下所示:

SUBS = dir1 dir2 dir3

depend clean:
         @-X=`pwd`;\
         for i in $(SUBS);\
         cd $$X/$$i;\
         done
“@-X=
pwd
做什么?我推测它以某种方式将当前目录的值分配给X,但我不知道如何读取“@-”语法

另外,为什么X&i需要在前面加上“$$”而不仅仅是“$”?我已经通过实验验证了这两个$都是必要的,但我认为应该只需要一个来替换它们的值

我不知道怎么读“@-”语法

只需从左到右阅读:-)撇开玩笑,行开头的“@”告诉make在执行之前不要回显行;“-”告诉它忽略错误

X&i需要在前面加上“$$”而不仅仅是“$”


因为make本身有通过$访问的变量,但在本例中,规则使用shell变量,这些变量也由$访问。$$只是一个转义,因此执行的shell命令包含$X,而不是makefile变量X的内容,该变量可能为空。

OK-如果我理解正确的话,“X=
pwd'“将当前工作目录的值分配给X并打印出来。”@X=
pwd
“做同样的事情,但没有在stdout中给我一个连续的注释。”@-X=
pwd`”有点多余,因为我没有看到“pwd”会引起很多错误。但是为什么“X”与“SUBS”不同呢“,访问哪一个主要需要一美元?“SUBS”是保留字吗?等等。。。我想我明白了。SUB只由make读取,所以它只需要一个$,而X由shell读取,所以它需要2$,一个用于make,一个用于shell…..打印不太正确,它不会打印pwd,它会打印传递给shell的整个命令行。关于变量:是的,“make”中有变量,shell中有变量。如果你看这些行,你会发现它们都与\相连,所以它们实际上都在同一个shell中,因为它只是一个大shell命令行。这就是为什么它也可以使用shell变量的原因。如果您只是删除@并调用“make clean”,它应该响应一个大的命令行,其中$SUBS被扩展,$$X“减少”为$X。这就是shell中执行的内容。