Makefile을 작성했는데, make
명령을 실행하면 rm
Mmakefile의 모든 명령이 완료된 후 예상치 못한 작업이 수행되는 것을 발견했습니다. 하지만 rm
Makefile에는 명령을 작성 하지 않았습니다 .
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
삭제를 보고합니다 .