我正在编写以下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
答案 0 :(得分:2)
不,f: f
与f:
相同并非如此。后者定义了一个目标f
,它不依赖于任何其他文件。前者定义了一个目标f
,它取决于文件f
(同一个文件)。
这是一种不可能的情况,因为f
无法在自身之前更新。在构建f
之前,make将尝试构建其先决条件,即f
。但是,在构建先决条件f
之前,必须构建其先决条件,即f
。在此之前可以构建make必须构建其先决条件,也是f
。永远和永远等等。
当发现这种不可能的情况时,可以做不同的事情。例如,它可能会因错误代码而失败。
但是选择做的是删除先决条件以避免递归。这就是你看到的警告信息的含义。
所以实际上虽然它们不是同一个东西,但make会最终处理 f:f
,就像它只是f
一样。< / p>