Makefile 에서 트리구조를 따라가며 Make 하는 방법을 모르겠습?
글쓴이: freezm7 / 작성시간: 금, 2004/09/03 - 12:23오후
좀 큰 규모의 Makefile 을 처음 작성하는데요.
소스 디렉토리의 구조는 다음과 같습니다.
c:\app | +--driver | | | |-Makefile | | | |-driver.c | +--data | | | |-Makefile | | | |-data.c | |-Makefile | |-app.c
src\Makefile 에서 다음과 같이 하려고 했는데,
OBJS = app.o driver\driver.o data\data.o
app.out : sub_make $(OBJS)
$(LD) -o $@ (OBJS)
sub_make :
$(MAKE) -C driver
$(MAKE) -C data
위와 같이 하면,
$(LD) -o $@ $(OBJS) 가 항상 실행되게 될 것 같네요.
많이 쓰이는 기법이 있을 것 같은데...
아시는 분 알려주세요~
(make clean 했을 때도 마찬가지로 되면 좋겠구요.)
Forums:


원하시는게 자세히는 모르겠지만, 디렉토리가 많다는건 나누어지는 모듈이 많
원하시는게 자세히는 모르겠지만, 디렉토리가 많다는건 나누어지는 모듈이 많다는 거 같은데, 아래 Makefile이 참조가 되실지 모르겠네요.
........생략...... OBJS_APP = app.o OBJLST_APP = $(OBJS_APP:%=$(DIR_BUILD)%) LIB_DRIVER = $(DIR_BUILD)libdriver.a LIB_DATA = $(DIR_BUILD)libdata.a OBJS = $(OBJLST_APP) $(LIB_DRIVER) $(LIB_DATA) $(DIR_BUILD)app.out: $(OBJS) $(LD) $(LDFLAGS_DEF) -o $@ $(OBJS) $(LDFLAGS) $(LIB_DRIVER): mkdir -p $(DIR_BUILD) (cd $(DIR_DRIVER); DIR_BUILD=$(DIR_BUILD) CC=$(CC) AR=$(AR) CFLAGS="$(CFLAGS)" CFLAGS_EXTRA="$(CFLAGS_EXTRA)" make) $(LIB_DATA): mkdir -p $(DIR_BUILD) (cd $(DIR_DATA); DIR_BUILD=$(DIR_BUILD) CC=$(CC) AR=$(AR) CFLAGS="$(CFLAGS)" CFLAGS_EXTRA="$(CFLAGS_EXTRA)" make) $(DIR_BUILD)%.o: %.c mkdir -p $(DIR_BUILD) $(CC) $(CFLAGS_DEF) $(CFLAGS) $(CFLAGS_EXTRA) $< -o $@ ......생략........각 모듈별로 .a파일로 만들고, 모든 오브젝트 파일은 DIR_BUILD라는 빌드 디렉토리에서 관리하도록 하면 도움이 되실거에요. 제가 쓰는게 일반적인지 아닌지는 잘 모르겠습니다. 다른 분들 스타일도 좀 올려주세요.....^^
자답입니다.
# visit these subsystems in this order SUBSYSTEMS = sub1 sub2 sub5 sub4 sub3 sub6 sub7 # type 'make all' to visit and build subsystems all: buildparts <commands to assemble the subproducts> buildparts: for dir in ${SUBSYSTEMS}; do \ (cd $$dir; ${MAKE} all); \ done인용 : http://www.codefast.com/z-software-builds/m-recursive-make.html
즐겁게 살아 볼까나~*
댓글 달기