目标和依赖性都是相同的

时间:2014-01-07 10:04:56

标签: makefile

我正在编写以下makefile:

TARGET=fmake
TARGET2=test_second
f:f
    echo Some text
clean:
    rm -f fmake test_second
CC=$(VAR2)
VAR2=gcc

在make命令之后我有:

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

什么意思是make: Circular f <- f dependency dropped.

是真的吗?
f:f
    echo Some text

等同于

f:
    echo Some text

1 个答案:

答案 0 :(得分:2)

不,f: ff:相同并非如此。后者定义了一个目标f,它不依赖于任何其他文件。前者定义了一个目标f,它取决于文件f(同一个文件)。

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

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

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

所以实际上虽然它们不是同一个东西,但make会最终处理 f:f,就像它只是f一样。< / p>