2010-08-01 4 views
2

src/ 하위 대상이있는 Makefile을 만들어 정적 라이브러리를 만들려고합니다. 나는 현재이 시도하고
:Makefile의 동적 대상

%.o: %.cpp 
    $(CXX) $(CXXFLAGS) $(INCLUDE) -c -o [email protected] $< 
lib%.a: $(patsubst %.cpp, %.o, $(wildcard src/%/*.cpp)) 
    $(AR) rcs [email protected] $^ 

을하지만이 작동하지 않는, 작품과 일치하는 목표지만, 의존성 추적하지 않습니다.
난 그냥 혼자 적절한 디렉토리에 .cpp 파일을 제대로 완료 src/%/*.cpp을두고 있지만 변환 그것을 내부 문자열 함수를 사용하려고하는 순간이 .cpp.o%가 더 이상 작동하지 않습니다.

답변

2

전제 조건 목록에서 patsubst와 같은 기능을 사용할 수 없다는 것을 알고 있기 때문에 까다 롭습니다. 이를 수행하는 방법은 여러 가지가 있습니다. 이것은 아마도 가장 추한 것입니다. 경로에 변수를 저장 한 다음 make를 다시 호출하여 규칙 외부의 필수 조건 목록을 구성 할 수 있도록하십시오.

ifdef OBJPATH 
LIBOBJECTS := $(patsubst %.cc,%.o,$(wildcard src/$(OBJPATH)/*.cc)) 
lib%.a: $(LIBOBJECTS) 
    $(AR) rcs [email protected] $^ 
else 
lib%.a: src/%/*.cc 
    @$(MAKE) -s [email protected] OBJPATH=$* 
endif