You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile如何实现需手动编辑文件的依赖校验与构建中断逻辑

你可以按照以下方式修改Makefile实现需求:

修改后的完整Makefile

SOURCE = source
AUTO = auto
MANUAL = manual
RESULT = result

# 最终产物依赖auto,保证执行构建逻辑前auto已经更新到最新版本
$(RESULT): $(AUTO)
	# 检查manual文件是否存在
	@if [ ! -f $(MANUAL) ]; then \
		echo "错误:未找到$(MANUAL)文件,请基于最新生成的$(AUTO)修改后保存为$(MANUAL),再重新执行make"; \
		exit 1; \
	fi
	# 检查manual是否比source或auto旧
	@if [ $(MANUAL) -ot $(SOURCE) ] || [ $(MANUAL) -ot $(AUTO) ]; then \
		echo "错误:$(MANUAL)已过时,请基于最新的$(AUTO)更新后再重新执行make"; \
		exit 1; \
	fi
	# 所有检查通过后生成最终产物
	cp $(MANUAL) $(RESULT)

# auto的原有构建规则保留
$(AUTO): $(SOURCE)
	cp $(SOURCE) $(AUTO)

# 可选的清理规则
.PHONY: clean
clean:
	rm -f $(AUTO) $(RESULT)

实现逻辑说明

  • 调整result的依赖为仅auto,保证运行构建逻辑前,auto已经基于最新的source构建完成,符合要求的自动构建auto的前置逻辑
  • 删除原有的manual构建规则,避免make自动生成/修改manual文件,保证该文件只能由用户手动编辑
  • 在result的构建配方中加入两层校验:
    • 第一层校验manual是否存在,不存在直接打印提示终止构建
    • 第二层用shell的-ot判断参数,检查manual的修改时间是否早于source或者auto,过时就打印提示终止构建
  • 所有校验通过后才会执行最终的result生成操作

场景验证

  1. 首次执行make:会自动构建auto,然后提示找不到manual终止,用户基于auto修改保存为manual后重新执行即可正常构建
  2. 修改source后执行make:会自动重新构建auto,然后检测到manual过时提示更新,用户修改manual后重新执行即可正常构建
  3. manual为最新版本时执行make:跳过所有提示,直接生成result

内容的提问来源于stack exchange,提问作者Konstantin Morenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:45:04