2016-12-03 7 views
0

을 변경하면 오브젝트 파일을 재 구축 내 메이크 파일에 다음과 같은 규칙이 있습니다헤더가

HFILES 내 프로젝트의 모든 헤더를 포함
%.o:  $(HFILES) 

%.o:  %.c 
    $(CC) $(CFLAGS) $*.c 

.

문제는 헤더가 의도 한대로 변경되면 개체 파일을 다시 작성하지 않는다는 것입니다. 왜 첫 번째 라인은 객체 파일의 전제 조건에 헤더를 추가하지 않습니까?

답변

2

패턴 규칙이 작동하지 않기 때문입니다. 패턴 규칙에 대한 문서에 따르면 패턴 규칙을 취소 (즉, 삭제)하는 제조법이없는 패턴 규칙을 만들 때 말합니다.

첫 번째 줄은 대상이 %.o이고 선행 조건이 $(HFILES)이지만 규칙이 없으므로 그 행은 단순히 패턴 규칙 (어쨌든 존재하지 않음)을 취소합니다.

당신은 쓸 수 있습니다 :

%.o: %.c $(HFILES) 
     $(CC) $(CFLAGS) -c -o [email protected] $< 

(당신이 당신의 CFLAGS 변수에 -c 플래그를 넣으면 안됩니다).

물론,이 HFILES 변경, 이 패턴을 사용하는 모든 .o 파일의 모든 헤더 파일이 재 구축 될 경우 것을 의미한다,주의하십시오.