Chamando o wget de make baseado em um padrão

1

Estou usando make para pegar um conjunto de arquivos atualizados diariamente em um site. O que eu gostaria de fazer é colocar os arquivos em uma pasta nomeada com a data e usar o make para fazer outro processamento no arquivo. Eu tentei isso:

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

O problema é a última linha. Eu não sei como passar o nome do arquivo para wget, já que "% .csv" não é válido neste contexto. Como faço para conseguir o que eu estou depois?

    
por Scott Deerwester 04.12.2015 / 22:19

1 resposta

1

Eu acredito que você queira usar a variável automática $* . Da documentação do GNU make:

$*

The stem with which an implicit rule matches. If the target is dir/a.foo.b and the target pattern is a.%.b then the stem is dir/foo. The stem is useful for constructing names of related files. In a static pattern rule, the stem is part of the file name that matched the % in the target pattern.

No seu caso específico, a regra do wget pode ser reescrita como:

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

Tags