如何修改Makefile,兼容GPT处理人工干预后的组装流程?
解决Makefile覆盖手动修改文件的问题
修改后的Makefile内容
# 定义生成的片段文件和AI输出文件列表 SEG_FILES := $(wildcard seg-*.txt) AI_OUTPUTS := $(SEG_FILES:seg-%.txt=ai-output-%.txt) # 生成数据片段:仅当data.txt更新或seg文件不存在时执行拆分 segments: $(SEG_FILES) $(SEG_FILES): data.txt break --size 20M ./data.txt seg-%d.txt # 单个AI处理规则:仅对应seg文件更新或ai-output文件不存在时运行GPT $(AI_OUTPUTS): ai-output-%.txt: seg-%.txt gpt $< > $@ # 拼接最终文件:仅当ai-output文件有更新或final.txt不存在时执行拼接 assemble: final.txt final.txt: $(AI_OUTPUTS) concat --output $@ -- $(AI_OUTPUTS) # 可选清理规则 clean: rm -f seg-*.txt ai-output-*.txt final.txt
核心修改说明
- 替换伪目标为文件依赖:移除原有的
ai伪目标,改用模式规则为每个ai-output-*.txt建立单独的依赖关系。Make会自动检查文件的修改时间,仅在必要时重新运行GPT。 - 精准控制重生成条件:每个
ai-output-%.txt仅依赖对应的seg-%.txt——如果手动修改了ai-output文件,且对应的seg文件未更新,Make不会重新生成该文件,保留手动修改结果。 - 调整拼接触发逻辑:让
final.txt直接依赖所有ai-output文件,而非伪目标ai。只有当ai-output文件有更新或final.txt不存在时,才会执行拼接操作。
两种场景的适配
- 目录干净时:执行
make assemble,Make会依次触发segments生成片段文件,再生成所有ai-output文件,最后拼接得到final.txt。 - 手动修改ai-output后:执行
make assemble,Make会检查所有ai-output文件的状态——只要对应的seg文件未更新,就不会重新运行GPT,直接基于修改后的文件拼接生成final.txt。
内容的提问来源于stack exchange,提问作者Dyson Cho
相关产品推荐
相关产品推荐

