2012-01-30 2 views
0

:자동으로 생성 메이크 전제 조건 (GNU-메이크업) 나는 다음과 같은 형식으로 생성 할 필요가 아카이브 파일의 목록이 들어 내 메이크 중 하나의 변수를 가지고

/libpath/mylib1/obj/mylib1.a 
/libpath/mylib2/obj/mylib2.a 
/libpath/mylib3/obj/mylib3.a 

등등. 기본적으로 .cpp 파일에 대한 상위 폴더를 검색하고/obj 하위 폴더에 .o 전제 조건을 만듭니다 (따라서/libpath/mylib1에 foo.cpp 및 bar.cpp가 포함되어있는 경우). 전제 조건은 /libpath/mylib1/obj/foo.o 및 /libpath/mylib1/obj/bar.o 등입니다. 이 작업을 수행 할 수있는 유일한 방법은 .SECONDEXPANSION입니다. .cpp 파일 목록을 만들고 폴더와 확장명을 제거한 다음 .o 확장명으로 접미사를 붙이고 대상 폴더 앞에 접두사를 붙입니다.

잘 작동하지만 지나치게 복잡한 방식으로이 문제를 해결할 수는 없습니다. 이런 식으로 할 수있는 더 좋고/깨끗한 방법이 있습니까?

답변

1

매크로로 논리를 추출하고 후자를 전제 조건으로 사용하는 것이 좋습니다. 또한 notdir + basename + addsuffix 대신 patsubst function을 선호하고 $(dir [email protected]) 대신 $(@D) automatic variable을 선호합니다.

lib_objects = $(patsubst %.cpp,$(@D)/%.o,$(notdir $(wildcard $(@D)/../*.cpp))) 

%.a: $$(lib_objects) 

IMO, 조금 더 나아 보이지 않습니까?

+0

감사합니다. Eldar. 내가 실제로 필터링 할 수있는 네 가지 확장 기능이 있기 때문에 addsiffix를 사용했습니다. patsubst를 자세히 살펴 봐야합니다. 건배! –

+0

@ 마크, 환영합니다! –