如何优化Makefile实现将dump文件夹文件批量复制到多个测试目录
优化后实现
PROJECT_DIR := $(realpath $(CURDIR)) BUILD_DUMP_DIR := $(PROJECT_DIR)/dump # 配置区:可直接修改要复制的文件、目标测试目录 DUMP_FILES := pyproject.toml poetry.lock DESTINATION_DIRS := unit system endtoend # 自动生成所有目标文件完整路径 TARGETS := $(foreach dir,$(DESTINATION_DIRS),$(addprefix $(BUILD_DUMP_DIR)/tests/$(dir)/,$(DUMP_FILES))) # 静态模式规则:匹配所有目标,对应源文件为dump目录下的同名文件 $(TARGETS): $(BUILD_DUMP_DIR)/tests/%/$(notdir $@) : $(BUILD_DUMP_DIR)/$(notdir $@) @echo "=> 复制 $< 到 $@" @cp $< $@ # 声明伪目标,避免存在同名文件时命令不执行 .PHONY: copy-dump copy-dump: $(TARGETS)
核心优化点
- 配置逻辑分离:要复制的文件、目标目录统一放在开头配置区,后续新增文件/测试目录直接修改配置即可,无需调整复制逻辑
- 消除重复代码:无需为
pyproject.toml和poetry.lock分别定义两套变量、两套复制规则,一套逻辑覆盖所有待复制文件 - 规则更安全:使用静态模式规则只会匹配我们生成的
TARGETS目标,不会意外影响Makefile中其他同名目标 - 原生支持增量更新:只有源文件修改、或者目标文件不存在时才会执行复制操作,不会做无用重复操作
如果你的测试目录实际是在项目根目录下的tests而非dump/tests,修改TARGETS生成逻辑里的路径前缀即可。
内容的提问来源于stack exchange,提问作者Akino76
相关产品推荐
相关产品推荐

