2014-12-09 2 views
0

나는 의존성으로 구축 할 라이브러리의 무리가 있습니다. 그들은 : 메이크업 대상을 두 번

libs/foo/lib/libfoo-O3.a 
libs/bar/lib/libbar-O3.a 
I 효과적으로 이러한 규칙에 내 LIBS 문자열을 변환하고 싶은

:

build : libs/foo/lib/libfoo-O3.a libs/bar/lib/libbar-O3.a 

libs/foo/lib/libfoo-O3.a: 
    $(MAKE) -C libs/foo 

libs/bar/lib/libbar-O3.a: 
    $(MAKE) -C libs/bar 
내가 두 번 %을 사용할 수 없습니다 알고

, 그래서 불행하게도 libs/%/lib/lib%-O3.a가 아닌 선발은 같다 목표. 이것을 할 또 다른 방법이 있습니까? define 템플릿으로 무엇인가요? 그냥 이름을 포함하는 LIBS 변수를 변경할 수있는 경우

답변

2

, 당신은 쉽게 작업을 수행 할 수 있습니다

LIBS = foo bar 

LIBPATHS := $(foreach L,$(LIBS),libs/$L/lib/lib$L-O3.a) 

당신은 여전히이 작업을 수행 할 수없는 경우, 약간 덜 읽을 수 :

LIBS = libs/foo libs/bar 

LIBPATHS := $(foreach L,$(LIBS),$L/lib/lib$(notdir $L)-O3.a) 

다음과 같이 입력하십시오.

$(LIBPATHS): 
     $(MAKE) -C $(firstword $(subst /lib/, ,[email protected]))