2012-07-03 3 views
1

필자는 여러 가지 가짜 타겟으로 구성된 메이크 파일이 있습니다. 하나는 디버그 플래그로 프로그램을 컴파일하고 하나는 최적화 플래그로 컴파일합니다.이전 컴파일을 기반으로 동작을 변경하려면 어떻게해야합니까?

하나의 문제는 이전에 하나의 타겟을 사용했지만 나중에 다른 타겟을 지정할 때 필요하다고 알지 못하는 것입니다 모든 파일을 새 플래그 세트로 다시 컴파일하십시오.

예를 들어 디버그 대상으로 모든 것을 컴파일합니다. 컴파일 한 후 프로그램을 테스트합니다. 최적화 대상을 사용하여 make를 실행하려고해도 아무런 문제가 보이지 않지만 Make의 계산에 의해 모든 것이 최신 상태이므로 아무 것도 컴파일하지 않습니다.

나는 대상 파일의 위치를 ​​선택한 대상에 종속시키는 아이디어를 얻었지만 그 외에는 아무것도 가지고 있지 않습니다.

우아하게 처리 할 수있는 방법이 있습니까?

+0

Makefile은 컴파일 된'.o' 파일을 어디에 저장합니까? – robert

+0

감사합니다. 문구를 비슷하게 사용하지 않았기 때문에 부분적으로이 질문을 보지 못했습니다. 그 점을 알려 주셔서 감사합니다. 나는 또한 닫는 것을 투표했다. –

답변

1
# Assuming you already know the type of new build 
# and it is stored in this variable. 
BUILD_TYPE := release 

ifneq ($(MAKECMDGOALS),__clean) 

# This file stores the type of the last build. 
-include .last_build_type.mk 

ifneq ($(__last_build_type),$(BUILD_TYPE)) 
.PHONY : .last_build_type.mk 
.last_build_type.mk : 
    @$(MAKE) __clean 
    @echo '__last_build_type := $(BUILD_TYPE)' > [email protected] 
endif 

else 

.PHONY : __clean 
__clean : clean # Delegate the job to your real 'clean' target. 

endif 
0

이 종류의 것은 자동으로 makepp에 걸립니다.

관련 문제