Makefile在多个目标规则中保留一些中间件

时间:2012-09-03 09:30:47

标签: makefile gnu-make

我使用以下Makefile部分:

.PHONY: all
all: _MyModule.so

_%.so: %.pb.cc %.pb.h
    python setup.py build

%.pb.cc %.pb.h: %.proto
    protoc --cpp_out=. $^  # Generate these two files together

我希望make能够创建_MyModule.so文件并删除中间词MyModule.pb.ccMyModule.pb.h。实际情况是,只删除其中一个文件(.h.cpp)。我还注意到它取决于它们在_%.so依赖列表中的出现顺序。

有人可以解释这种行为吗?

我怎样才能优雅地去除所有中间体?

1 个答案:

答案 0 :(得分:2)

多么奇特。我会站出来说这看起来像是GNUMake中的一个错误。具有多个目标的模式规则具有特殊行为,并且似乎此行为与中间文件的处理无法正确相关(并且.INTERMEDIATE没有帮助)。

我不认为这是一个优雅的解决方案,但它有效:

%.pb.cc: %.pb.h
    @:

%.pb.h: %.proto
    ...

P.S。原来这是known bug