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

Windows 11下GNU Make 3.80:如何按目标列表匹配依赖实现文件复制

Windows 11下GNU Make 3.80文件批量复制规则实现

直接用GNU Make的foreach和eval函数动态生成你需要的逐个文件映射规则,完美适配无类Unix Shell的环境:

# 先确保你已正确定义变量:
# ADDFILES = Makefile ../Docs/test.log images/screen.jpg
# ASFILES = Makefile test.log images/screen.job
# DESTDIR = Others/

# 动态生成一对一复制规则
$(foreach pair,$(join $(addsuffix :,$(ADDFILES)),$(ASFILES)),\
  $(eval $(DESTDIR)$(word 2,$(subst :, ,$(pair))): $(word 1,$(subst :, ,$(pair)))\
    @copy "$<" "$@"\
  )\
)

关键逻辑说明

  • join $(addsuffix :,$(ADDFILES)),$(ASFILES):将源文件列表和目标文件名列表配对,形成源文件:目标名的格式
  • foreach pair,...:遍历每一组配对关系
  • subst :, ,$(pair):拆分配对字符串,分离出源文件路径和目标文件名
  • eval:根据拆分结果生成独立的复制规则,目标路径自动拼接DESTDIR

生成的最终规则

运行Make时,会自动生成你期望的规则:

Others/Makefile: Makefile
    copy "$<" "$@"

Others/test.log: ../Docs/test.log
    copy "$<" "$@"

Others/images/screen.job: images/screen.jpg
    copy "$<" "$@"

注意:给copy命令的参数加引号,避免路径包含空格时出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:48:11