![](/img/trans.png)
[英]Makefile: “No rule to make target…” with multiple working directories
[英]Makefile keeps some intermediates in multiple target rule
我使用以下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
中的外觀順序_%.so
依賴列表。
有誰能解釋這種行為?
我怎樣才能優雅地去除所有中間體?
有多奇怪。 我會站出來說這看起來像是GNUMake中的一個錯誤。 具有多個目標的模式規則具有特殊行為,並且似乎此行為與中間文件的處理.INTERMEDIATE
(並且.INTERMEDIATE
沒有幫助)。
我不會稱這是一個優雅的解決方案,但它的工作原理:
%.pb.cc: %.pb.h
@:
%.pb.h: %.proto
...
PS結果證明這是一個已知的錯誤 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.