자동화와 Make
데이터와 코드에 걸린 의존성
학습 목표
- 출력 파일은 입력 파일에 대한 제품일 뿐만 아니라, 출력파일을 만들어 내는 코드 혹은 스크립트에 대한 제품이기도 하다.
- 거짓 의존성을 인지하고 회피한다.
지금까지 작성한 Makefile은 다음과 같다:
# Count words.
.PHONY : dats
dats : isles.dat abyss.dat last.dat
isles.dat : books/isles.txt
python wordcount.py $< $@
abyss.dat : books/abyss.txt
python wordcount.py $< $@
last.dat : books/last.txt
python wordcount.py $< $@
# Generate archive file.
analysis.tar.gz : *.dat
tar -czf $@ $^
.PHONY : clean
clean :
rm -f *.dat
rm -f analysis.tar.gz
데이터 파일은 텍스트 파일에 대한 제품이기도 하지만, 텍스트 파일을 처리하고 데이터 파일을 생성하는 wordcount.py
, 스크립트에 대한 제품이기도 하다. 또한, wordcount.py
파일을 데이터 파일에 대한 의존성으로 추가해야만 된다:
isles.dat : books/isles.txt wordcount.py
python wordcount.py $< $@
abyss.dat : books/abyss.txt wordcount.py
python wordcount.py $< $@
last.dat : books/last.txt wordcount.py
python wordcount.py $< $@
wordcount.py
프로그램을 편집한 척하고, Make를 재실행하면,
$ touch wordcount.py
$ 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
wordcount.py
파일을 .dat
파일에 의존성으로 추가한 후, analysis.tar.gz
에 명기된 대상을 빌드하는데 관여된 의존성을 도식화했는데, Makefile에서 구현된 사항이 다음 그림에 나와 있다:
분석 스크립트를 문서기록보관 아카이브에도 추가하자:
analysis.tar.gz : *.dat wordcount.py
tar -czf $@ $^
Make를 재실행하면,
$ make analysis.tar.gz
다음 결과를 얻게 된다:
tar -czf analysis.tar.gz abyss.dat isles.dat last.dat wordcount.py