[완료] msys에서 재귀적 make를 하려는데 오류가 납니다.
글쓴이: steveyoon77 / 작성시간: 화, 2011/08/02 - 12:10오전
개발환경을 바꿔보려고 <유닉스/리눅스 프로그래밍 필수 유틸리티>를 보면서 따라하는 중인데, (당연하겠지만) 예제가 리눅스에서는 잘돌아가는데 MinGW/msys에서는 의도대로 돌지가 않아서 난감합니다.
하루 종일 검색을 해봤는데도, 답을 알 수가 없어서 이렇게 질문을 드려봅니다.
책의 예제와 같이 구성을 해봤습니다.
C:\01.work\study_makefile>ls Makefile calendar include main memo C:\01.work\study_makefile>tree 폴더 PATH의 목록입니다. 볼륨 일련 번호가 0065006C 9CE6:85C3입니다. C:. ├─calendar ├─include ├─main └─memo
가장 바깥의 Makefile은 아래와 같구요.
C:\01.work\study_makefile>cat Makefile export CC = gcc #OBJ = $(patsubst %.c, %.o, $(wildcard *.c)) OBJ = memo.o calendar.o main.o all : MEMO CALENDAR MAIN diary MEMO : cd memo && make CALENDAR : cd calendar && make MAIN : cd main && make diary : $(OBJ) $(CC) -o $@ $^ clean : cd memo && make clean cd calendar && make clean cd main && make clean -rm -rf *.o $(TARGET)
sub-directory의 Makefile들은 모두 동일하게 아래와 같습니다.
C:\01.work\study_makefile>cd memo && cat Makefile && cd .. OBJ = $(patsubst %.c, %.o, $(wildcard *.c)) CFLAGS = -I../include all : $(OBJ) cp -f $^ ../ clean : rm -rf *.o C:\01.work\study_makefile>cd calendar && cat Makefile && cd .. OBJ = $(patsubst %.c, %.o, $(wildcard *.c)) CFLAGS = -I../include all : $(OBJ) cp -f $^ ../ clean : rm -rf *.o C:\01.work\study_makefile>cd main && cat Makefile && cd .. OBJ = $(patsubst %.c, %.o, $(wildcard *.c)) CFLAGS = -I../include all : $(OBJ) cp -f $^ ../ clean : rm -rf *.o
그런데 이 소스로 리눅스(우분투)에서는 잘 돌아가는데, 윈도에서는 아래와 같이 룰을 못찾는다고 합니다. sub-directory로 가서 make하는 부분을 들어가지도 못한 모양입니다.
C:\01.work\study_makefile>make make: *** No rule to make target `memo.o', needed by `diary'. Stop.
최신 mingw/msys를 설치해서 make 버전은 아래와 같구요.
C:\01.work\study_makefile>make -version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-pc-msys
하루종일 구글링 하다가 결국 이렇게 질문 드립니다.
무지한 중생을 깨우쳐 주세요.
Forums:
타켓에 MEMO가 있고 디렉토리에 memo가 있어서
타켓에 MEMO가 있고 디렉토리에 memo가 있어서
make가 이미 MEMO 타켓이 완료되었다고 판단하는 건 아닐까요?
즉, 리눅스에서는 MEMO와 memo는 다르지만 윈도우에서는 MEMO와 memo는 같으니까요..
윈도의 대소문자 구별 안하는 문제였네요. 감사합니다.
KTD님 감사합니다. 미처 생각하지 못했던 것이었네요.
아래와 같이 수정하여 동작되는 것을 확인했습니다.
댓글 달기