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
相关产品推荐
相关产品推荐

