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