2010-06-21 7 views
0

"make cleanlists"라는 단일 대상을 실행하려고합니다. 이 목표에는 전제 조건이 없으므로 다른 규칙을 건드리지 않고 즉각적으로 실행해야합니다. 특정 대상을 실행하도록 GNU make를 강제 실행합니다.

.PHONY: cleanlists 
cleanlists: 
    @echo cleaning source and header lists .. 
    @rm -f sourcelist.mk 
    @rm -f headerlist.mk 
    @echo done. 

그러나 경우에

은, 그 두 개의 파일이 존재하지 않는 것을 전제 조건으로 해당 파일을 가진 다른 규칙을 확인하고 마지막으로 'cleanlists'목표를 실행하기 전에 이들의 재생을 초래할 수 있습니다.

이 동작을 피하기 위해 make를 강제하는 간단한 방법이 있습니까?

감사

+0

모르겠다. "청결자를 만들라는 것"이 ​​그 파일을 없애지 않는다는 말입니까? –

+0

아니요, make는 파일을 삭제하기 전에 먼저 파일을 만듭니다 (make를 호출 할 때 존재하지 않는 경우). – rainer

+0

매우 이상합니다. 작은 크기 인 경우 전체 메이크 파일을 게시 할 수 있습니까? 또는 크기가 큰 경우 게시하기에 충분히 작거나 갑자기 문제가 사라질 때까지 부품을 제거하십시오 (큰 단서를 줄 수 있음). – Beta

답변

1

이 두 파일의 .mk 이름은 메이크 콘텐츠를 구문 분석하고 실행하도록 다른 곳 메이크에 당신이 그 (것)들을 포함하는 것을 제안 :

include sourcelist.mk 
include headerlist.mk 

실행하기 위해 사용자의 make cleanlists 명령에 최신 메이크 파일이있는 경우 How Makefiles Are Remade에 설명 된대로 이러한 파일을 다시 생성하고 종속성을 계산하고 명령을 실행하기 전에 전체 메이크 파일을 다시 작성합니다.

이것은 깨끗한 규칙에는 의미가 없지만 을 알지 못합니다. this trick from the manual을 사용하면 특별히이 규칙을 다음과 같이 처리 할 수 ​​있습니다.

+0

감사 : 이것은 꽤 잘 작동합니다! – rainer

관련 문제