makefile - makefile 规则中先决条件和目标之间的最小时间差
问题描述
我有一个简单的makefile:
target: prerequisite
@echo "Touch target"
@touch target
prerequisite:
@echo "Touch prerequisite"
@touch prerequisite
GNU make的文档指出,如果第一个规则prerequisite
比target
. 但是,如果我运行以下测试脚本:
#!/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 运行它。
解决方案
推荐阅读
- database - 如何从laravel在mysql中保存单选按钮值
- python - 使用 shell 脚本检查“diff”命令的输出
- vuejs2 - TypeError:无法读取 Vue2 中未定义的属性“组件”
- qt - QML 中自定义组件“矩形或项目”的自动 KeyNavigation.tab
- python - 如何反转输入字符串
- python - Python 类(继承)使用 Person、Student、Professor 类
- python-3.x - 如何将代码从 python 3.5 调整到 3.7,将股票数据附加到主文件中
- python - 从 2 TypeError 更新到 python3: can only concatenate str (not "bytes") to str
- ionic3 - 显示单击的项目详细信息而不是整个数组列表
- python - Python - TensorArray 的大小为零,但元素形状 [?,128] 未完全定义