1

次の 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. 実際には、ファイルの 1 つだけが削除されます (.hまたは.cpp)。_%.soまた、依存関係リストに表示される順序に依存していることにも気付きました。

誰でもこの動作を説明できますか?

すべての中間体をエレガントに削除するにはどうすればよいですか?

4

1 に答える 1

2

どのように独特です。これは GNUMake のバグのように見えます。複数のターゲットを持つパターン ルールには特別な動作があり、この動作は中間ファイルの処理と正しく一致しない (そして.INTERMEDIATE役に立たない) ようです。

私はこれをエレガントなソリューションとは呼びませんが、うまくいきます:

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

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

PSこれは既知のバグであることがわかりました。

于 2012-09-03T15:44:33.560 に答える