【问题标题】:GNU Make: Archiving library members with replacementGNU Make:使用替换归档库成员
【发布时间】:2012-10-05 19:55:35
【问题描述】:

以下两个选项有什么区别? $< 不会在这两种情况下都只扩展为一个 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

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    在第一个选项中,make 知道足以在 libcounter.a 内部查看 lexer.o 对象,以查看它是否需要使用新对象更新库。在第二个选项中,将库本身的时间戳与对象进行比较,这可能会导致错过库的更新 - 例如想象一下 1) lexer.o 被构建,然后 2) counter.o 被构建,然后 3) libcounter.a 得到新的 lexer.o 添加;现在,libcounter.a 上的时间戳比 counter.o 更新,所以 make 错误地断定它不需要将新的 counter.o 添加到库中。

    【讨论】:

    • 太棒了。很好的解释。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2011-01-29
    相关资源
    最近更新 更多