무엇이?

Norm에 따르면 make remake fcleanmake all 한 것과 같아야 합니다.

re: fclean all

그런데 여러분, 이 경우에 **allfclean 보다 나중에 실행되지 않을 수 있다**는 사실을 아시나요?

왜?

크게 두 가지 경우가 있어요.

순서가 바뀌는 경우

사실 일반적인 경우의 re: fclean all에서 순서가 뒤바뀌지는 않습니다.

문제는 이런 경우입니다.

all: test clean
test: clean
	# ... do something
clean:
	rm -rf $(TMP_FILES)

테스트를 진행한 후 잔여 파일들을 정리하고 싶을 수 있을 거에요.

make testmake clean 한 것과 같은 효과를 얻기 위해서 all: test clean으로 작성했습니다.

하지만 실제로는 clean이 먼저 실행됩니다. clean이 이미 test의 의존성에 포함되어 있어서요.

동시에 실행되는 경우

make -j 2 re

make의 -j 옵션으로 여러 작업을 동시에 병렬로 처리하도록 할 수 있습니다.

allfclean은 의존 관계가 없기 때문에 동시에 시작될 것입니다.

해결 방법

의존성은 의존성일 뿐입니다.

순서가 보장된 작업이 필요한 경우 의존성을 사용하지 마세요.

re:
    $(MAKE) fclean
    $(MAKE) all