Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile在多目标规则中保留了一些中间对象_Makefile_Gnu Make - Fatal编程技术网

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。实际上,

我使用以下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
。实际上,只有一个文件被删除(
.h
.cpp
)。我还注意到,这取决于它们在
\%.中的出现顺序,因此
依赖项列表

有人能解释这种行为吗


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

真奇怪。我会冒险说这看起来像GNUMake里的一只虫子。具有多个目标的模式规则具有特殊的行为,而且这种行为似乎与中间文件的处理方式不一致(而且
.intermediate
没有帮助)

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

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

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

另外,这是一个。

@Albert,
是unix中“不做任何事情”的命令,当Make规则中的命令前面有
@
时,它的意思是“安静地做”。