Makefile:使用规则复制文件

use*_*907 11 makefile

我正在尝试使用我的规则复制文件,但我的规则不会被触发:

BUILDDIR = build
COPY_FILES = code/xml/schema/schema.xsd config.txt

all: $(BUILDDIR) $(COPY_FILES) copy

$(BUILDDIR):
    mkdir -p $@

$(COPY_FILES):
    cp -f $@ $(BUILDDIR)

copy:
    cp -f $(COPY_FILES) $(BUILDDIR)
Run Code Online (Sandbox Code Playgroud)

我试图使用$(COPY_FILES)但它没有被触发,虽然$(BUILDDIR)和副本被触发.我不确定我的Makefile有什么问题.如果可能的话,我想让$(COPY_FILES)规则起作用(并删除副本).有谁知道吗?

Bet*_*eta 20

$(COPY_FILES)规则的问题是该规则的目标是已经存在的两个文件,即code/xml/schema/schema.xsdconfig.txt.Make看不到执行规则的理由.我不确定为什么Make不执行copy规则,但我怀疑有一个叫做copy混乱的文件.无论如何,[复制]一个坏规则.

试试这个:

COPY_FILES = $(BUILD_DIR)/schema.xsd $(BUILD_DIR)/config.txt

all: $(COPY_FILES)

$(BUILD_DIR)/schema.xsd: code/xml/schema/schema.xsd
$(BUILD_DIR)/config.txt: config.txt

$(BUILD_DIR)/%:
    cp -f $< $@
Run Code Online (Sandbox Code Playgroud)

  • @PeterT:没问题:`COPY_FILES:= $(patsubst src /%,build /%,$(wildcard src/*))`和最终规则`$(BUILD_DIR)/%:$(SRC_DIR)/%` (5认同)
  • @Beta如果要复制的文件位于`src /`目录并定期更改,您会如何处理?例如,如果您无法明确列出需要复制的所有文件,而是使用`$(通配符)`构建它们,该怎么办? (2认同)