我正在尝试使用我的规则复制文件,但我的规则不会被触发:
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)规则起作用(并删除副本)。有谁知道吗?
答案 0 :(得分:18)
$(COPY_FILES)
规则的问题在于该规则的目标是两个已存在的文件,即code/xml/schema/schema.xsd
和config.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