자동화와 Make

패턴 규칙

학습 목표

  • Make 패턴 규칙을 작성한다.
  • Make 와일드-카드 %를 대상과 의존성에 사용한다.
  • Make 특수 변수 $*을 동작에 사용한다.
  • 규칙에는 Make 와일드-카드 사용을 회피한다.

Makefile에는 여전히 반복되는 콘텐츠가 있다. 텍스트 파일과 데이터 파일 명칭을 제외하고 각 .dat 파일에 대한 규칙은 동일한다. 이러한 규칙을 단일 패턴 규칙(pattern rule)으로 교체할 수 있는데, 패턴 규칙을 사용해서 books/ 디렉토리에 .txt 파일을 임의 .dat 파일로 빌드한다:

%.dat : books/%.txt wordcount.py
        python wordcount.py $< $*.dat

%는 Make 와일드-카드(wild-card)다. $*은 특수 변수로, 특수변수가 스템(stem)을 규칙이 매칭하는 것으로 치환한다.

만약 Make를 다시 실행하면,

$ make clean
$ make dats

다음 결과를 얻게 된다:

python wordcount.py books/isles.txt isles.dat
python wordcount.py books/abyss.txt abyss.dat
python wordcount.py books/last.txt last.dat

Makefile은 이제 훨씬 더 짧아졌고, 깨끗해졌다:

# Count words.
.PHONY : dats
dats : isles.dat abyss.dat last.dat

%.dat : books/%.txt wordcount.py
    python wordcount.py $< $*.dat

# Generate archive file.
analysis.tar.gz : *.dat wordcount.py
    tar -czf $@ $^

.PHONY : clean
clean :
        rm -f *.dat
        rm -f analysis.tar.gz