2011-11-05 3 views
4

하는 메이크 파일을 사용하여, 나는 다음과 같은 가능한되고 싶어요.
(즉, 내가 목표는 대소 문자를 구별 할 수 있도록하지 않습니다.) 난 그냥이 같은 가능성이 매를 쓸 수메이크 (비 - 대소 문자를 구별 목표)

물론 :

.PHONY clean Clean CLean CLEan CLEAn ... 
clean Clean CLean CLEan CLEAn ...: 
    $(DELETE_STUFF) 

하지만이이 요구되지 않는 이유 당신이 볼 수 있다고 생각 ..
나는 'make'라는 매크로가 내장되어 있다는 것을 알고있다. MAKECMDGOALS는 make를 타이핑 한 후에 입력하는 것과 동일 할 것이다.

MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]") 

는 모두 소문자로 변수를 변경 않지만, 여전히 입력 대상 목표에 대한 규칙을 호출합니다 :

for example, running 'make clean all backup' 
$(MAKECMDGOALS) = "clean all backup" 

나는 내 메이크 파일의 상단에이 작업을 수행하기 위해 노력했다.

난 이런 식으로 재정의하는 시도했다 : 빨리 수행됩니다 희망

override MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]") 

아직 성공을.

는이 같은 목표 만들려고 :

$(MAKECMDGOALS): 
MAKECMDGOALS:= $(shell echo $(MAKECMDGOALS) | tr "[:upper:]" "[:lower:]") 
#BUT I CAN'T CALL OTHER TARGETS FROM THE SHELL 

나는 그것이 이상 소란 바보 자세히 알고,하지만 확실히 오른쪽 방법이있을 가지고있다?

답변

6

원유하지만 효과적인 :

%: 
     $(MAKE) $(shell echo [email protected] | tr "[:upper:]" "[:lower:]") 

clean: 
     delete_stuff 
5

당신은 (적어도 확인 GNU에서) 쉘을 사용하여 예를 들어, 목표를 생성 할 수 있습니다

SHELL := /bin/bash 
clean_insensitive := $(shell echo {C,c}{L,l}{E,e}{A,a}{N,n}) 

$(clean_insensitive) : 
    rm *.o 

또 다른 해결책 만 수락하게 인수를 소문자 및 호출 래퍼를 작성하는 것 소문자 타겟.