[완료] Makefile 좀 봐주시겠습니까? 추억의 나래머드(Narai MUD)입니다 ㅠㅠ

ophmun의 이미지

일단 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..

여기까지 해도 안 되서 일단 오늘은 포기했습니다 ㅜㅜ

정리가 안 되는군요..

아무튼 좀 부탁드리겠습니다 ㅜㅜ

ymir의 이미지

나래..로군요... ;;;;

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 』

ophmun의 이미지

감사합니다.
Mizz님 아이디가 낯이 익네요 ㅎ (아이디 맞나요 ㅋ)
Auxo님도 보시더니 알 것 같다고 합니다

애초에 narai/obj 디렉토리는 쓸일이 없는 거겠죠?

utils 쪽의 빌드는 말씀하신거에 dependency 만 추가해서 시도해보겠습니다

ymir의 이미지

원래 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 』

ophmun의 이미지

make 안 되면 일일히 손으로 하지-_- 라는 각오로 컴파일 중입니다

make 자체는 잘 돌아가는데..

딴 글에도 썼지만 termios 때문에 컴파일 에러나는게 벽이네요 ㅠㅠ

어쨌든 나래 다시 오픈할때까지 포기 안 할렵니다 ㅋ

ymir의 이미지

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 』

ophmun의 이미지

잘 돌아갑니다.

...

저 좀 인간승리인듯?

유닉스고 C고 쥐뿔도 모르는 놈이 결국 컴파일 해냈습니다-_-

뭐 컴파일때 워닝이야 수두룩하지만 (...)

zone 로딩하면서 메모리 에러 뜨는거는 몇개 존을 지워주면 잘 되더군요 (...)

다른 소스로 해봤더니 존 삭제없이 잘 되었습니다..

제가 가진 소스가 좀 많아서 -_- 어떤 소스로 빌드해서 돌릴까가 고민이네요

아참.. 2002년경에 제가 한 1년간 나래 돌린적이 있었습니다. Gem 님이 컴파일 해주셔서..

그때 캐릭터 파일들 고스란히 있더라구요 -.- 이번에 소스 뒤져보면서 알았습니다 OTL

암튼, 도움 주셔서 넘 감사합니다

bushi의 이미지

총체적인 난국이네요.

OBJS = $(SRCS:.c=.o)
UOBJS = $(UTILS:.c=.o)
 
...
 
OFILES	= $(addprefix $(OBJDIR)/,$(OBJS))
로 고치고
dms	: check_objdir $(OFILES)
	$(CC)	-o $(.BINDIR)/nms.tmp $(CFLAGS) $(OFILES) $(LFLAGS)
로 고친다음, 마지막 부분에
define cc_obj
$(1): $(addprefix $(3)/,$(2))
        $(CC) -o $$@ -c $$< $(CFLAGS)
endef
 
$(foreach obj,$(OFILES),$(eval $(call cc_obj,$(obj),$(notdir $(obj:.o=.c)),$(.SRCDIR))))
정도 추가하면 dms 는 빌드 될 것 같습니다.

OTL

ophmun의 이미지

도움 감사합니다 ㅜㅜ

원래의 Makefile에서는 OFILES는 /src와 /utils에 있던 소스를 컴파일해서 나온 오브젝트 파일이 /obj에 들어가고, 그 오브젝트 파일들을 합해서 OFILES 라고 명명한걸로 보입니다.

OFILES = $(addprefix $(.OBJDIR)/,$(OBJS)) $(addprefix $(.OBJDIR)/,$(UOBJS))

이렇게 하고 나머지는 말씀하신대로 시도해보겠습니다

(디렉토리 문제는 어떻게 할까 고민중입니다. 한곳에 다 몰아넣고 해도 될까나-_-)

vacancy의 이미지


자세히 읽어보지는 않았습니다만
bsd 계열에서 잘 돌던 makefile이라면
GNU make 대신 BSD 계열의 make를 써보시는 것도 괜찮겠네요.

데비안 쪽에는 pmake 패키지(NetBSD make입니다)가 있으니,
우분투에서도 있을법한데 한번 확인해보심이 ..

ophmun의 이미지

앜ㅋㅋ

완전 잘 되요 OTL (컴파일 에러는 여전하지만 ㅜㅜ)

Makefile 수정한게 다 뻘짓이었어요 -_-;;

알려주셔서 감사합니다 ㅜㅜ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.