2012-03-14 3 views
0

Makefile에서 전제 조건 목록의 대상 이름을 참조하고 그 중 일부를 빌드하고 싶습니다. 형태의 뭔가 : 그래서전제 조건 목록에서 대상 이름 참조하기

%.foo: $(addsuffix .bar, $(DATA_%)) 
    @echo $< 

즉, 가정하면, 당신은 :

DATA_test = 1 2 3 

당신이로 호출 할 때 :

make test 

즉 확장됩니다에 :

1.bar 2.bar 3.bar 

어떻게 든 가능합니까? 문제에 대한 더 나은 접근 방법은 무엇입니까?

답변

1

귀하의 Make 버전이 secondary expansion 인 경우, 이것은 아마도 작동 할 것입니다. (제가 현재 사용할 수있는 것은 오래된 버전이기 때문에 테스트 할 수 없습니다).

이없이
.SECONDEXPANSION: 

%.foo: $$(addsuffix .bar, $$(DATA_$$*)) 
    @echo $^ 

은,이보다 그것을 할 수있는 더 좋은 방법이 표시되지 않는 :

define FOO_RULE 
$(1).foo: $(addsuffix .bar,$(DATA_$(1))) 
endef 

FOO_TYPES = test real whatever 

$(foreach t,$(FOO_TYPES),$(eval $(call FOO_RULE,$(t)))) 

%.foo: 
    @echo building [email protected] from $^ 
+0

두 번째 확장이 완벽하게 작동합니다! 감사! 나는 전에 그것을 실제로 시도했지만 addsuffix 앞에 $를 두 배로 늘리지는 않았다. 이것은 훨씬 잘 작동하고 완벽하게 이해됩니다. –

+0

2 차 확장 및 평가판을 사용할 수있는 옛날에 그것을 수행하는 방법은 make의 자동으로 다시 만들어진 makefile 기능을 활용하는 것이 었습니다. 생성 된 타겟을 포함하는 메이크 파일 스 니펫을 생성하는 규칙을 작성한 다음 해당 스 니펫을 포함시킵니다. 다소 효율적이지는 않지만 디버그하기가 까다로울 수도 있지만 eval은 동일한 문제가 있습니다. 적어도 자동으로 생성 된 makefile은 무언가가 옆으로 가면 makefile 출력을 보게됩니다. – MadScientist