GNU Makeを使用したプロジェクトの管理を読んでおり、この例は第2.7章-自動依存関係の生成にあります。著者はGNUマニュアルから彼らを言います:
%.d: %c
$(CC) -M $(CPPFLAGS $< > $@.$$$$; \
sed s',\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
しかし、私はこれで同じことをすることができました(注意してくださいsed
):
-include $(subst .c,.d,$(SOURCES))
%.d: %.c
@$(CC) -M $(CPPFLAGS) $< | sed 's|:| $*.d : |' > $@;
これらの行はすべて、依存関係を生成してから、*.d
名前を追加するだけです。彼らは最初の行を以下から変更しなければなりませんでした:
foo.o: bar.h foo.h fubar.h
to foo.o foo.d:bar.h foo.h fubar.h
私のはもっと単純で、かなりうまく機能しているようですが、GNUの人々には彼らのsed
命令の理由があったと思います。また:
- なぜファイルをにリダイレクトするの
sed
ですか?単純に共通線パラメータとして使用してみませんか - 中間ファイルを完全にスキップしてみませんか?
GNUの人たちもこれらについて考えていたかもしれませんが、何らかの理由で、より複雑な設定を採用しました。私は彼らの推論を理解したいので、その場でこれらを行うことができます。