根据模式从 make 调用 wget

根据模式从 make 调用 wget

我用来make获取网站上每天更新的一组文件。我想做的是将文件放入以日期命名的文件夹中,然后使用 make 对文件进行其他处理。我试过这个:

SUFFIXES = .csv
FILES = file1.csv file2.csv file3.csv
BASE_DIR = some/dir
DATE = $(shell date +"%Y%m%d")
SOURCE_FILES = $(patsubst %,$(BASE_DIR)/$(DATE)/%,$(FILES))
ACTIVE_FILES = $(patsubst %,$(BASE_DIR)/%,$(FILES))

all: $(BASE_DIR)/$(DATE) $(ACTIVE_FILES)

$(BASE_DIR)/%.csv: $(BASE_DIR)/$(DATE)/%.csv
    rm -f $@
    ln $(BASE_DIR)/$(DATE)/%

$(BASE_DIR)/$(DATE):
    mkdir $@

$(BASE_DIR)/$(DATE)/%.csv:
    cd $(BASE_DIR)/$(DATE); wget http://example.com/data/%.csv

问题出在最后一行。我不知道如何将文件名传递给 wget,因为“%.csv”在此上下文中无效。我怎样才能实现我所追求的目标?

答案1

我相信你想使用自动变量$*。来自 GNU make 的文档:

$*

隐式规则匹配的词干。如果目标是 dir/a.foo.b且目标模式是a.%.b则词干是 dir/foo。词干对于构建相关文件的名称很有用。在静态模式规则中,主干是与%目标模式中的 匹配的文件名的一部分。

在您的具体情况下, wget 规则可以重写为:

$(BASE_DIR)/$(DATE)/%.csv:
    cd $(BASE_DIR)/$(DATE); wget http://example.com/data/$*.csv

相关内容