Norm에 따르면 make re
는 make fclean
후 make all
한 것과 같아야 합니다.
re: fclean all
그런데 여러분, 이 경우에 all
이 fclean
보다 나중에 실행되지 않을 수 있다는 사실을 아시나요?
크게 두 가지 경우가 있어요.
사실 일반적인 경우의 re: fclean all
에서 순서가 뒤바뀌지는 않습니다.
문제는 이런 경우입니다.
all: test clean
test: clean
# ... do something
clean:
rm -rf $(TMP_FILES)
테스트를 진행한 후 잔여 파일들을 정리하고 싶을 수 있을 거에요.
make test
후 make clean
한 것과 같은 효과를 얻기 위해서 all: test clean
으로 작성했습니다.
하지만 실제로는 clean
이 먼저 실행됩니다. clean
이 이미 test
의 의존성에 포함되어 있어서요.
make -j 2 re
make의 -j
옵션으로 여러 작업을 동시에 병렬로 처리하도록 할 수 있습니다.
all
과 fclean
은 의존 관계가 없기 때문에 동시에 시작될 것입니다.
의존성은 의존성일 뿐입니다.
순서가 보장된 작업이 필요한 경우 의존성을 사용하지 마세요.
re:
$(MAKE) fclean
$(MAKE) all