대략 다음과 같은 Makefile이 있습니다.
.PRECIOUS: %.a %.b %.c
%.a:
touch $@
%.b: %.a
touch $@
%.c: %.b
touch $@
를 사용하여 "test.c"를 생성하면 make test.c
3개 파일( test.a
, test.b
, test.c
)이 모두 올바르게 생성됩니다. 그러나 지금 삭제 test.a
한 후 다시 생성하려고 하면 test.c
아무 일도 일어나지 않습니다.
그 이유는 분명합니다. test.c
에만 의존 test.b
하고 test.b
변경되지 않았으므로 다시 빌드할 필요가 없습니다. 다만, 없어진 test.b
만큼 재구축해야 하고 test.a
, 로 확산시켜야 한다 test.c
. 나는 이 행동이 매우 직관적이지 않은 부작용이라고 생각합니다.
직관적인 방법으로 "전이적" 종속성을 처리하도록 make를 얻을 수 있나요? (즉, 삭제 후 test.a
모든 대상을 다시 빌드해야 합니다.)
문제는 패턴 규칙에서만 발생합니다.
(Ps 저는 모든 중간 파일이 필요하기 때문에 PRECIOUS.GNU Make의 기본 동작은 중간 파일을 제거하는 것입니다.)