Makefile:使用规则复制文件

时间:2013-08-06 22:21:02

标签: 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)

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

2 个答案:

答案 0 :(得分:18)

$(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 $< $@

答案 1 :(得分:0)

就我而言,我使用一个简单的“ for循环”来cp所有这些文件。

例如,编写如下规则:

RELEASE_DIR = ../rc1
RELEASE_FILES = ai.h main.cc main_async.cc bmp_utils.h bmp_utils.cc
release: $(RELEASE_FILES)
     for u in $(RELEASE_FILES); do echo $$u; cp -f $$u $(RELEASE_DIR); done

然后

make release