Makefile:.o文件的循环依赖关系的说明

时间:2016-07-07 01:47:58

标签: makefile

考虑以下makefile:

all : a.vo a.glob

a.gl%b a.v% : a.v
    touch a.glob a.vo

当我运行make -j2时,我得到:

$ rm -f a.vo a.glob; make -j2
make: Circular a.v.o <- a.v dependency dropped.
touch a.glob a.vo

我知道为什么a.v.o取决于a.v,但我看不出a.v取决于a.v.o的方式。这种依赖性来自哪里(有没有办法禁用它)?

1 个答案:

答案 0 :(得分:1)

当没有定义规则时,GNU make使用Implicit Rules。特别是,

  

n是通过C编译器运行链接器(通常称为ld)从n.o自动生成的。使用的精确配方是'$(CC)$(LDFLAGS)n.o $(LOADLIBES)$(LDLIBS)'。

如你所见:

~ $ cat Makefile
all: a.v
        echo "foo"
a.v.o:
        echo "bar"
~ $ make
echo "bar"
bar
cc   a.v.o   -o a.v
gcc: error: a.v.o: No such file or directory
gcc: fatal error: no input files
compilation terminated.
<builtin>: recipe for target 'a.v' failed
make: *** [a.v] Error 1

cc已执行。