내 메이크 다음과 같은 :업데이트하기 쉬운 메이크 파일은 어떻게 만듭니 까?
FOO_OBJECT_FILES := $(OBJDIR)/Foo.cpp.o
BAR_OBJECT_FILES := $(OBJDIR)/Bar.cpp.o $(OBJDIR)Bar.c.o
ALL_OBJECT_FILES := $(FOO_OBJECT_FILES) $(BAR_OBJECT_FILES)
$(BINDIR)/Foo.a: $(FOO_OBJECT_FILES)
# Rules for making a static library out of Foo's object files go here.
$(BINDIR)/Bar.a: $(BAR_OBJECT_FILES)
# This uses the exact same command sequence as the previous rule.
$(BINDIR)/All.a: $(ALL_OBJECT_FILES)
# Ditto.
# ...
때 이상의 대상이 프로젝트에 추가됩니다 ( 아닌 경우), 개발자는 적어도 세 가지 업데이트해야합니다 :
- 목록을 새 대상의 개체 파일
- 모든 개체 파일 목록
- 다른 대상과 동일한 규칙을 사용하는 경우에도 새 대상을 만들기위한 대상
이 과정을 단순화하는 방법이 있습니까? 그렇지 않습니까?
와일드 카드 규칙을 사용했지만 매크로와 함께 작동하지 않는 것처럼 보입니다.
$(BINDIR)/%.a: $(%_OBJECT_FILES)
# ...
개체 파일 목록을 규칙으로 처리 할 수 있지만 최종 대상 규칙은 개체 파일에 직접 액세스 할 수 없습니다.
OBJECT_FILES_Foo: $(OBJDIR)/Foo.cpp.o
OBJECT_FILES_Bar: $(OBJDIR)/Bar.cpp.o $(OBJDIR)Bar.c.o
OBJECT_FILES_All: FOO_OBJECT_FILES BAR_OBJECT_FILES
$(BINDIR)/%.a: OBJECT_FILES_%
# This rule can't see into the object file lists to use them to build.
더 좋은 방법은 없을까요?
* "더 좋은 방법이 없을까요?"* - 'automake'가 만들어진 종류가 아닙니다. 재귀 적으로 make를 호출하기 전에 일부 변수를 설정하여이 작업을 수행 할 수 있다고 생각하지만, 더 간단하거나 더 좋다고 생각하지 않습니다. – Flexo