使用 Make 移动不同文件夹的多个文件

Move multiple files for different folders using Make

有两个文件,即 pyproject.toml 和 poetry.lock,它们位于名为 dump 的文件夹中。我想在 运行 测试时将这些文件移动到 2 个目录。

今天我这样做

PROJECT_DIR := $(realpath $(CURDIR))
BUILD_DUMP_DIR := $(PROJECT_DIR)/dump
DESTINATION_DIRS := unit system endtoend

PY_SOURCES = $(patsubst %,$(BUILD_DUMP_DIR)/%, pyproject.toml)
POETRY_SOURCES = $(patsubst %,$(BUILD_DUMP_DIR)/%, poetry.lock)

PY_PROJECT = $(foreach dir, $(DESTINATION_DIRS), $(patsubst %, $(BUILD_DUMP_DIR)/tests/$(dir)/%, pyproject.toml))
POETRY_PROJECT = $(foreach dir, $(DESTINATION_DIRS), $(patsubst %, $(BUILD_DUMP_DIR)/tests/$(dir)/%, poetry.lock))

$(PY_PROJECT): $(PY_SOURCES)
    @echo "=> Moving $< to $@"
    @cp $< $@

$(POETRY_PROJECT): $(POETRY_SOURCES)
    @echo "=> Moving $< to $@"
    @cp $< $@

copy-dump: $(PY_PROJECT) $(POETRY_PROJECT)

so 运行 make copy-dump 会将这些文件移动到指定目录。意识到必须有更好的 MakeFile 命令来执行此操作。感谢所有的输入

不确定我是否了解所有细节,但如果您使用 GNU make 并且想将您的 2 个文件分别复制(而不是移动)到 3 个不同的位置,则以下内容会更简单一些:

PROJECT_DIR := $(realpath $(CURDIR))
BUILD_DUMP_DIR := $(PROJECT_DIR)/dump
DESTINATION_DIRS := unit system endtoend

PY_SOURCES = $(BUILD_DUMP_DIR)/pyproject.toml
POETRY_SOURCES = $(BUILD_DUMP_DIR)/poetry.lock

PY_PROJECT = $(patsubst %,$(BUILD_DUMP_DIR)/tests/%/pyproject.toml,$(DESTINATION_DIRS))
POETRY_PROJECT = $(patsubst %,$(BUILD_DUMP_DIR)/tests/%/poetry.lock,$(DESTINATION_DIRS))

.PHONY: copy-dump
copy-dump: $(PY_PROJECT) $(POETRY_PROJECT)

.SECONDEXPANSION:

$(PY_PROJECT) $(POETRY_PROJECT): $(BUILD_DUMP_DIR)/$$(notdir $$@)
    @echo "=> Moving $< to $@"
    @cp $< $@

有关二次扩展的详细信息,请参阅the GNU make documentation