2011-10-31 5 views
0

다음과 같이 Makefile (gnu make)을 작성하고 싶습니다. 즉, 변수에 저장된 값 목록에 대해 명령을 실행하고 싶습니다. 그것은 가능합니까 아니면 추한 루프를 작성해야합니까?변수를 입력으로 사용하는 Makefile 규칙

못생긴 규칙은 작동하지만 스마트하지 않습니다.

SERVERS:=localhost 
COMMAND:=uptime 
OUTPUTS:=$(patsubst %, %.output ,$(SERVERS)) 

.PHONY: smart ugly 

smart: $(OUTPUTS) 

%.output: % 
     ssh -n $^ $(COMMAND) > [email protected] || $(RM) [email protected] 

ugly: 
     for s in $(SERVERS); do \ 
       ssh -n $$s $(COMMAND) > $$s.output || $(RM) $$s.output; \ 
     done 

답변

1

스마트 규칙은 존재하지 않는 필수 구성 파일 % (예 : localhost)을 찾습니다. 그에 따라 규칙도 건너 뜁니다.

그래서, 사용 :

%.output: 

대신하고 작동합니다.

또한 || rm [email protected] 대신 특수 .DELETEONERROR 타겟을 살펴볼 수 있습니다. 당신의 표기법에서, 실패한 SSH는 종료 코드 0 (rm에서)으로 끝나고 전체 make 프로세스는 성공으로 끝나고 (% .output이 종속 일 때) 실패 후 계속 행복하게 진행됩니다.

관련 문제