我使用以下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.cc
和MyModule.pb.h
。实际情况是,只删除其中一个文件(.h
或.cpp
)。我还注意到它取决于它们在_%.so
依赖列表中的出现顺序。
有人可以解释这种行为吗?
我怎样才能优雅地去除所有中间体?
答案 0 :(得分:2)
多么奇特。我会站出来说这看起来像是GNUMake中的一个错误。具有多个目标的模式规则具有特殊行为,并且似乎此行为与中间文件的处理无法正确相关(并且.INTERMEDIATE
没有帮助)。
我不认为这是一个优雅的解决方案,但它有效:
%.pb.cc: %.pb.h
@:
%.pb.h: %.proto
...
P.S。原来这是known bug。