首页 > 解决方案 > makefile 规则中先决条件和目标之间的最小时间差

问题描述

我有一个简单的makefile:

target: prerequisite
    @echo "Touch target"
    @touch target

prerequisite:
    @echo "Touch prerequisite"
    @touch prerequisite

GNU make的文档指出,如果第一个规则prerequisitetarget. 但是,如果我运行以下测试脚本:

#!/bin/bash

rm -rf target prerequisite

make
sleep 0
touch prerequisite
if [[ prerequisite -nt target ]]; then echo "Prerequisit is newer than target"; fi
make

rm -rf target prerequisite

它不会执行第一条规则两次,输出为:

Touch prerequisite
Touch target 
Prerequisit is newer than target
make: `target' is up to date.

如果我将睡眠时间增加到例如 1,它会执行它。我对这种行为感到相当惊讶,make考虑更新文件是否需要最小时间差?显然,文件系统知道先决条件是更新的。

我在 MacOS X 11.4 上使用为 i386-apple-darwin11.3.0 构建的 GNU Make 3.81 运行它。

标签: makefile

解决方案


推荐阅读