패턴을 기반으로 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

문제는 마지막줄에 있습니다. 이 컨텍스트에서는 "%.csv"가 유효하지 않기 때문에 파일 이름을 wget에 전달하는 방법을 모르겠습니다. 내가 원하는 것을 어떻게 달성할 수 있나요?

답변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

관련 정보