2015-01-10 2 views
0

나는 다음과 같은 규칙 (GNU는 확인) 메이크 있습니다어떻게 메이크 파일이 두 번 재구성되지 않습니까?

Makefile: dep1 
    ...rebuild makefile... 

config: 
    ...rebuild makefile... 

을 그러나, 나는 make config을 실행할 때 가끔 dep1Makefile보다 최신 때문에 Makefile는 두 번 다시 작성됩니다. 이것은 내 시간 낭비입니다. 어떻게 이런 일이 일어나지 않도록합니까?

명확하게하기 위해 Makefile 타겟은 메이크 파일을 생성하는 데 사용 된 파일이 변경되면 다시 작성합니다. config 대상을 사용하면 makefile을 강제로 다시 작성하고 시스템 구성이 변경되는 경우와 같이 캐시를 무시할 수 있습니다.

+0

왜 당신이 설정 조리법의 메이크를 재 구축 : 여기

솔루션입니까? 동일한 파일을 빌드하는 두 개의 다른 레서피가 있고 두 대상이 모두 오래된 것으로 결정하면 파일이 두 번 빌드됩니다. 그것에 대해 할 수있는 방법이 없습니다. 실제로 제공하는 요리법이 무엇인지 모릅니다. – MadScientist

+0

"왜 제조법에서 메이크 파일을 재구성하고 있습니까?" 이것이 makefile을 재구성하기위한'config' 레시피의 목적이다. 나는 메이크업이 내 규칙을 들여다 보지 않을 것으로 기대하지 않는다. 나는 두 가지 재 빌드를 막기 위해 할 수있는 일을 기대하고있다. –

+0

내가 말하는 것은 일반적으로 모든 주어진 타겟을 만드는 하나의 레시피 만 갖고 싶다는 것입니다. 두 가지 조리법을 가지고 있다면 동일한 목표를 세우십시오. 그런 다음 두 번 일할 수 있습니다. 이것이 바로 전제 조건입니다. 그러나'Makefile'을 다시 빌드하는 경우에는 make가 항상 makefile을 모두 다시 빌드하려고하기 때문에 필요하지 않습니다. http://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles .html 그래서 기본적으로'config' 타겟을 실행하기 전에'Makefile'이 최신 상태라는 것을 항상 알고 있습니다. – MadScientist

답변

0

명령 줄에 지정된 목표를 나열하는 MAKECMDGOALS이라고하는 잘못 설명 된 변수가 있습니다. 이 변수는 문서 색인의 아무 곳에 나 나타나지 않으며 특수 변수 섹션에 나타나지 않습니다. 문서에서 "특수 변수"라고 부릅니다!

ifneq (config,$(MAKECMDGOALS)) 
Makefile: dep1 
    ...rebuild makefile... 
endif 

config: 
    ...rebuild makefile... 
+0

색인에 표시됩니다 : http://www.gnu.org/software/make/manual/html_node/Name-Index.html#Name-Index_fn_letter-M 명령 줄 목표를 설명하는 절에 설명되어 있습니다. 아마도 "특수 변수"에서도 설명해야합니다. – MadScientist

관련 문제