Make가 중간 파일을 삭제하는 원인은 무엇입니까?

Make가 중간 파일을 삭제하는 원인은 무엇입니까?

Makefile을 작성했는데, make명령을 실행하면 rmMmakefile의 모든 명령이 완료된 후 예상치 못한 작업이 수행되는 것을 발견했습니다. 하지만 rmMakefile에는 명령을 작성 하지 않았습니다 .

run-%: d/%.out
    $<

d/%.out: d/%.c
    gcc -o $(subst .c,.out,$<) $<

출력 실행 make run-a:

gcc -o d/a.out d/a.c
d/a.out
rm d/a.out

아래 내용은 rm d/a.out제가 작성한 것이 아니니 주의하시기 바랍니다.

rm어떤 상황에서 자동 명령이 추가되나요?

답변1

이 작업을 수행하면 make run-a파일은 d/a.out중간 대상(의 종속성)에 의해 run-a생성되고 run-a기본 대상( )이 빌드되고 해당 중간 대상의 결과가 더 이상 필요하지 않을 때 삭제됩니다.

d/a.out"귀중함"으로 선언하여 삭제를 방지할 수 있습니다.

.PRECIOUS: d/%.out

당신은 또한 볼 수 있습니다"숨겨진 규칙의 사슬"GNU Make 매뉴얼에서:

중간 파일은 해당 규칙을 사용하여 다른 모든 파일처럼 다시 만들어집니다. 그러나 중간 파일은 두 가지 다른 방식으로 처리됩니다.

첫 번째 차이점은 […]

두 번째 차이점은 make가 b다른 것을 업데이트하기 위해 생성한다면,b더 이상 필요하지 않게 되면 삭제됩니다.. 따라서 make 이전에 존재하지 않았던 중간 파일은 make 이후에는 존재하지 않게 됩니다. 어떤 파일이 삭제되고 있는지 보여주는 명령을 인쇄하여 rm -f삭제를 보고합니다 .

관련 정보