使用 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。
有两个文件,即 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。