代码之家  ›  专栏  ›  技术社区  ›  Pablo

如何决定建立目标

  •  1
  • Pablo  · 技术社区  · 15 年前

    一个迹象是目标不存在,明白这一点。

    另一种方法是比较目标和先决条件的修改时间戳。在更多细节上它是如何工作的?比较目标时间戳和先决条件时间戳的逻辑是什么?当存在多个先决条件时,它是如何工作的?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Eric Melski    15 年前

    make 首先获取目标的修改时间,然后将该值与每个prereq的修改时间进行比较,按从左到右的顺序排列,一旦发现任何比目标更新的prereq就立即停止(因为单个更新的prereq足以要求重建目标)。

    例如,假设有这样一条规则:

    foo: bar baz boo
    

    此外,假设对这些文件的修改时间如下:

    foo: 4
    bar: 3
    baz: 6
    boo: 2
    

    在这种情况下, 制作 将比较的修改时间 foo (4)修改时间 bar (三)自 酒吧 年纪大了, 制作 将继续并比较 (4)修改时间 baz (6)。自从 小精灵 是新的, 制作 会决定 必须重建,并且将停止检查 (所以) boo 永远不会被检查)。

    如果输出目标有多个依赖行,如:

    foo: bar baz
    foo: boo
    

    第二行和后续依赖行中的prereq简单地附加到输出目标的prereq列表的末尾——也就是说,这个示例与上面的第一个示例完全相同。

    总的来说 制作 变体的行为是这样的,尽管有些变体具有修改此行为的扩展(例如,gnu make包含仅限订单的先决条件;sunmake具有“保持状态”功能;等等)。

        2
  •  0
  •   Vlad    15 年前

    unix make有相当复杂的推理规则来确定是否需要重建目标。对于gnu make,可以通过在没有makefile的目录中运行'make-p'来转储它们。

    规则也可能是连锁的,更多的解释是 here

    标准的unix make和microsoft nmake以类似的方式工作