Makefile在多目标规则中保留了一些中间对象
我使用以下Makefile部分:Makefile在多目标规则中保留了一些中间对象,makefile,gnu-make,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创建\u MyModule.so文件并删除中间产物MyModule.pb.cc和MyModule.pb.h。实际上,
.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
创建\u MyModule.so
文件并删除中间产物MyModule.pb.cc
和MyModule.pb.h
。实际上,只有一个文件被删除(.h
或.cpp
)。我还注意到,这取决于它们在\%.中的出现顺序,因此
依赖项列表
有人能解释这种行为吗
我怎样才能优雅地去除所有的中间体呢?真奇怪。我会冒险说这看起来像GNUMake里的一只虫子。具有多个目标的模式规则具有特殊的行为,而且这种行为似乎与中间文件的处理方式不一致(而且
.intermediate
没有帮助)
我不认为这是一个优雅的解决方案,但它是有效的:
%.pb.cc: %.pb.h
@:
%.pb.h: %.proto
...
另外,这是一个。@Albert,
:
是unix中“不做任何事情”的命令,当Make规则中的命令前面有@
时,它的意思是“安静地做”。