如何解释 makefile 循环中的 $@ 符号

How to interpret the $@ symbol in a makefile loop

在生成文件中我有这段代码

all clean dep depend print:
    for dir in $(DIRS); do \
        if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \
            true; \
        else \
            exit 1; \
        fi; \
    done

行中的$@是什么意思

if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \

我知道这是一个匹配规则目标文件名的自动变量。这里的目标似乎是一个像取消这样的命令:

cancell:
    rm -rf *.o

这是一个自动变量,扩展为导致配方 运行 的目标的名称。在您的例子中,如果您键入 make all,它会扩展为 all。如果您输入 make all clean,它会 运行 两次食谱 -- 第一次,$@ 将扩展为 all,第二次将扩展为 [=15] =].

查看文档 here