[완료] Makefile 좀 봐주시겠습니까? 추억의 나래머드(Narai MUD)입니다 ㅠㅠ
글쓴이: ophmun / 작성시간: 일, 2010/06/20 - 11:14오후
일단 Makefile부터 쭉 보여드리겠습니다
디렉토리 구조는 /narai 에 Makefile 있다고 치면
/narai/src : 소스
/narai/include : 헤더
/narai/obj : 비어있어요
/narai/utils : 소스
/narai/bin : 뭔지 모를 파일하나(run.nms2) 있네요
이렇습니다
# # Makefile for Narai MUD # # CC = gcc INCLUDE = -I../include -I/usr/local/include WFLAGS = -Wall OFLAGS = -O DEBUG = -g # # MFLAGS: SYPARK RETURN_TO_QUIT RESTART_BONUS INIT_BARE_HAND GHOST # OldMobileFormat New_STASH OLD_DAM_MESSAGE OLD_PARRY # OLD_MIRROR_IMAGE RESET_ZONE_BY_WIZARD OldMobAct # MFLAGS = -DIMO=41 -DSYPARK -DRETURN_TO_QUIT -DRESTART_BONUS DFLAGS = -DHAVE_TERMIOS_H CFLAGS = $(INCLUDE) $(WFLAGS) $(OFLAGS) $(DEBUG) $(DFLAGS) $(MFLAGS) -pipe LFLAGS = -lcrypt .SRCDIR = $(.CURDIR)/src .OBJDIR = $(.CURDIR)/obj .BINDIR = $(.CURDIR)/bin SRCS = act.comm.c act.informative.c act.movement.c act.obj1.c act.obj2.c \ act.offensive.c act.other.c act.social.c act.wizard.c board.c comm.c \ constants.c db.c fight.c guild_command.c guild_constant.c \ guild_informative.c guild_skills.c handler.c interpreter.c limits.c \ magic.c magic2.c magic3.c magic_weapon.c mail.c mob_magic.c mobact.c \ modify.c newcom.c quest.c shop.c spec_assign.c spec_procs.c \ spec_procs2.c spec_procs3.c spell_parser.c spells1.c spells2.c \ spells3.c utility.c version.c weather.c daerimsa.c gbisland.c UTILS = list.c change_level.c check_pass.c change_pass.c cps.c OBJS = $(SRCS:S/.c$/.o/g) UOBJS = $(UTILS:S/.c$/.o/g) UFILES = $(UTILS:S/^/$(.CURDIR)\/utils\//g) CFILES = $(SRCS:S/^/$(.SRCDIR)\//g) OFILES = $(OBJS:S/^/$(.OBJDIR)\//g) $(UOBJS:S/^/$(.OBJDIR)\//g) default : dms all : clean depend dms utils dep : depend depend : check_objdir mkdep $(CFLAGS) $(MFLAGS) $(CFILES) mkdep -a $(CFLAGS) $(UFILES) dms : check_objdir $(OBJS) $(CC) -o $(.BINDIR)/nms.tmp $(CFLAGS) $(OBJS) $(LFLAGS) utils : list change_level check_pass change_pass cps # # Utilities # list : list.o $(CC) $(CFLAGS) -s -o $(.BINDIR)/list list.o change_level: change_level.o $(CC) $(CFLAGS) -s -o $(.BINDIR)/change_level change_level.o check_pass: check_pass.o $(CC) $(CFLAGS) -s -o $(.BINDIR)/check_pass check_pass.o -lcrypt change_pass: change_pass.o $(CC) $(CFLAGS) -s -o $(.BINDIR)/change_pass change_pass.o -lcrypt cps: cps.o $(CC) $(CFLAGS) -s -o $(.BINDIR)/cps cps.o -lcrypt # # check_objdir: @if ! test -d $(.OBJDIR); then \ mkdir -p $(.OBJDIR); \ if ! test -d $(.OBJDIR); then \ echo "Unable to create $(.OBJDIR)."; \ fi; \ echo "OBJDIR $(.OBJDIR) created."; \ fi clean : /bin/rm -f $(.OBJDIR)/.depend /bin/rm -f $(OFILES)
아마 솔라리스나 BSD계열에서 돌았던 것 같습니다.
지금 우분투에서 컴파일하고싶은데, 가능하겠습니까?
OBJS = $(SRCS:S/.c$/.o/g) UOBJS = $(UTILS:S/.c$/.o/g) UFILES = $(UTILS:S/^/$(.CURDIR)\/utils\//g) CFILES = $(SRCS:S/^/$(.SRCDIR)\//g) OFILES = $(OBJS:S/^/$(.OBJDIR)\//g) $(UOBJS:S/^/$(.OBJDIR)\//g)
이 부분은 아래와 같이 고쳐야 알아먹는거 같습니다 -_-
OBJS = $(addsuffix .o,$(basename $(SRCS))) UOBJS = $(addsuffix .o,$(basename $(UTILS))) UFILES = $(addprefix $(CURDIR)/utils/,$(UTILS)) CFILES = $(addprefix $(SRCDIR)/,$(SRCS)) OFILES = $(addprefix $(OBJDIR)/,$(OBJS)) $(addprefix $(OBJDIR)/,$(UOBJS))
말씀드렸듯이 우분투입니다.
include 디렉토리 좀 바꿔주고 위에 보여드린 부분 수정한 후 make depend 실행하니
일단 .depend 파일은 문제없이 생성됩니다.
그런데 make dms 에서 진행이 안 됩니다.
얼핏보니 .depend 파일을 전혀 참조를 안 하는 것 같아 (리눅스라 다른 건가요?)
.depend 의 내용을 Makefile 뒷부분에 붙여넣고 다시 make dms..
여기까지 해도 안 되서 일단 오늘은 포기했습니다 ㅜㅜ
정리가 안 되는군요..
아무튼 좀 부탁드리겠습니다 ㅜㅜ
Forums:
음...
나래..로군요... ;;;;
Makfile 과 경로가 어긋나 있네요... 변수나 타겟도 조금 이상하고...
원래 utils 나 src 에 있던 걸 상위로 올리면서 대충 통합 한 것 같네요.
우선 INCLUDE 를 -I./include 로 바꾸셔야 할 것 같고...
OBJS 를 $(addsuffix .o,$(basename $(CFILES))) 로 바꾸시면 되겠네요..
그러면 OFILES 는 필요가 없어지겠네요.. 삭제..
utils 쪽은 개별로 풀어썼는데.. 경로가 안 맞네요..
object 타겟은 지우고 바로 빌드 해도 되지 않을까 싶네요...
list:
$(CC) $(CFLAGS) -o $(.BINDIR)/list utils/list.c
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
디렉토리가 문제...
감사합니다.
Mizz님 아이디가 낯이 익네요 ㅎ (아이디 맞나요 ㅋ)
Auxo님도 보시더니 알 것 같다고 합니다
애초에 narai/obj 디렉토리는 쓸일이 없는 거겠죠?
utils 쪽의 빌드는 말씀하신거에 dependency 만 추가해서 시도해보겠습니다
음...
원래 obj 디렉토리는 object 파일 저장 공간으로 쓰려고 분할 한 것 같네요.
제가 올려드린 글대로 한다면, obj 가 아니라 src 에 object 파일이 생길테니.. ;;
결과적으로 obj 디렉토리는 무용지물입니다.
정확하게 하자면 OBJS 의 src/*.o 경로를 obj/*.o 로 변경해 주어야겠네요.
음.. 저 말고도 mizz 라는 닉을 사용하는 분을 본 적이 있긴 합니다만..;; (lanian 님이었나..?)
Auxo 님이 아우크소님이시라면, 어디선가 뵌 적이 있는 것 같네요.. =)
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
산넘어 산
make 안 되면 일일히 손으로 하지-_- 라는 각오로 컴파일 중입니다
make 자체는 잘 돌아가는데..
딴 글에도 썼지만 termios 때문에 컴파일 에러나는게 벽이네요 ㅠㅠ
어쨌든 나래 다시 오픈할때까지 포기 안 할렵니다 ㅋ
음...
TERMIOS 는 http://kldp.org/node/115834 참조하시구요..
예전 하드에 나래 소스 받아 놓은게 생각나서 찾아서 빌드해 봤는데...
hit_limit() 의 protoytpe 중복 선언으로 쫑나는 거..
case 문에 char 대신 NULL 들어가 있는거... 정도 수정하고...
그 외에는 log() 함수의 prototype 만 선언해서 include 해주면 별 문제는 없는 듯 하네요..
실행해 보니, zone 파일 읽어들이면서 memory corruption 뜨고 난리도 아니네요.. ㅎㅎ
나중에 한가해지면 소스나 뜯어봐야겠습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
하앍.. 컴파일 성공했습니다.
잘 돌아갑니다.
...
저 좀 인간승리인듯?
유닉스고 C고 쥐뿔도 모르는 놈이 결국 컴파일 해냈습니다-_-
뭐 컴파일때 워닝이야 수두룩하지만 (...)
zone 로딩하면서 메모리 에러 뜨는거는 몇개 존을 지워주면 잘 되더군요 (...)
다른 소스로 해봤더니 존 삭제없이 잘 되었습니다..
제가 가진 소스가 좀 많아서 -_- 어떤 소스로 빌드해서 돌릴까가 고민이네요
아참.. 2002년경에 제가 한 1년간 나래 돌린적이 있었습니다. Gem 님이 컴파일 해주셔서..
그때 캐릭터 파일들 고스란히 있더라구요 -.- 이번에 소스 뒤져보면서 알았습니다 OTL
암튼, 도움 주셔서 넘 감사합니다
총체적인
총체적인 난국이네요.
OTL
총체적인 난국.. 날카로운 말씀이십니다-_-;;
도움 감사합니다 ㅜㅜ
원래의 Makefile에서는 OFILES는 /src와 /utils에 있던 소스를 컴파일해서 나온 오브젝트 파일이 /obj에 들어가고, 그 오브젝트 파일들을 합해서 OFILES 라고 명명한걸로 보입니다.
OFILES = $(addprefix $(.OBJDIR)/,$(OBJS)) $(addprefix $(.OBJDIR)/,$(UOBJS))
이렇게 하고 나머지는 말씀하신대로 시도해보겠습니다
(디렉토리 문제는 어떻게 할까 고민중입니다. 한곳에 다 몰아넣고 해도 될까나-_-)
자세히 읽어보지는
자세히 읽어보지는 않았습니다만
bsd 계열에서 잘 돌던 makefile이라면
GNU make 대신 BSD 계열의 make를 써보시는 것도 괜찮겠네요.
데비안 쪽에는 pmake 패키지(NetBSD make입니다)가 있으니,
우분투에서도 있을법한데 한번 확인해보심이 ..
으앜ㅋㅋㅋㅋㅋ
앜ㅋㅋ
완전 잘 되요 OTL (컴파일 에러는 여전하지만 ㅜㅜ)
Makefile 수정한게 다 뻘짓이었어요 -_-;;
알려주셔서 감사합니다 ㅜㅜ
댓글 달기