Makefile 目标和依赖项都是相同的

Makefile 目标和依赖项都是相同的,makefile,Makefile,我正在编写以下生成文件: TARGET=fmake TARGET2=test_second f:f echo Some text clean: rm -f fmake test_second CC=$(VAR2) VAR2=gcc 发出命令后,我有: make: Circular f <- f dependency dropped. echo Some text Some text 相当于 f: echo Some text 不,不是说f:f与f:相同。后者定

我正在编写以下生成文件:

TARGET=fmake
TARGET2=test_second
f:f
    echo Some text
clean:
    rm -f fmake test_second
CC=$(VAR2)
VAR2=gcc
发出命令后,我有:

make: Circular f <- f dependency dropped.
echo Some text
Some text
相当于

f:
    echo Some text

不,不是说
f:f
f:
相同。后者定义了一个不依赖于任何其他文件的目标
f
。前者定义了一个目标
f
,它依赖于一个文件
f
(同一个文件)

这是一种不可能的情况,因为
f
不能在其自身之前更新。在构建
f
之前,make将尝试构建其先决条件,即
f
。但是在可以构建先决条件
f
之前,make必须构建其先决条件,即
f
。在构建之前,make必须构建它的先决条件,也就是
f
。等等,永远

当make发现这种不可能的情况时,它可以做不同的事情。例如,它可能会失败并产生错误代码

但是make选择做的是删除先决条件以避免递归。这就是你看到的警告信息的含义

因此,实际上,尽管它们不是同一件事,make最终还是把
f:f
当作是
f

f:
    echo Some text