1

以下の 2 つのオプションの違いは何ですか? どちらの場合も、1 つだけ (定義では「最初のもの」) に$<拡張されませんか?requisite

オプション1:

libcounter.a(lexer.o): lexer.o
  $(AR) $(ARFLAGS) $@ $<

libcounter.a(counter.o): counter.o
  $(AR) $(ARFLAGS) $@ $<

オプション 2:

libcounter.a: lexer.o
  $(AR) $(ARFLAGS) $@ $<

libcounter.a: counter.o
  $(AR) $(ARFLAGS) $@ $<

ARFLAGS はrvどちらの場合にも当てはまります。

参考として、これらの例は、Managing Projects with GNU Makeという書籍から引用されています。

4

1 に答える 1

3

最初のオプションでは、ライブラリを新しいオブジェクトで更新する必要があるかどうかを確認するために、オブジェクトのmake内部を調べるのに十分な知識があります。2 番目のオプションでは、ライブラリ自体のタイムスタンプがオブジェクトと比較されます。これにより、ライブラリの更新が失われる可能性があります。たとえば、1)ビルドされ、2)ビルドされ、3)新しく追加されると想像してください。この時点で、 のタイムスタンプは よりも新しいため、新しいものをライブラリに追加する必要はないと誤って結論付けています。libcounter.alexer.olexer.ocounter.olibcounter.alexer.olibcounter.acounter.omakecounter.o

于 2012-10-05T20:16:30.523 に答える