一起做网游吧【4】:编译与执行脚本

在上一次说完之后,经过了不断的中断和不断的磨难,决定接着往前走。就像目前这篇文章,在经过不断的重启,被迫重写,最后才展现。虽然还不知道等下能不能发出去,但希望能发出去。
首先要说明的是目录结构等很多地方都参考了mochiweb,所以,如果看到类似的代码或者结构的话,不要感到奇怪。先是运行脚本和调试运行脚本,两个的区别在于调试运行可以检测到代码的更新,并强制更新(自我感觉是这样子的,因为我基本上没有运行过运行脚本)。

#!/bin/sh
#file server/start.sh
cd `dirname $0`
exec erl -pa $PWD/ebin $PWD/deps/*/ebin -boot start_sasl -s netgame
       
#!/bin/sh
#file server/start-dev.sh
cd `dirname $0`
exec erl -pa $PWD/ebin $PWD/deps/*/ebin -boot start_sasl -s reloader -s netgame -sname rix -heart -setcookie netgame
       

上面的代码,start.sh应该还需要添加-sname rix等参数,因为我基本上没用过,所以也就没有添加,随自己喜好吧。

makefile文件:

#file server/makefile
all:
	(cd src;$(MAKE))

clean:
	(cd src;$(MAKE) clean)
       

没什么好说的。

#file server/src/Makefile
       include ../support/include.mk

all: $(EBIN_FILES)
	cd driver && make
debug:
	$(MAKE) DEBUG=-DDEBUG

clean:
	rm -rf $(EBIN_FILES)
       

也没什么好说的。

#file server/support/include.mk
## -*- makefile -*-

######################################################################
## Erlang

ERL := erl
ERLC := $(ERL)c

INCLUDE_DIRS := ../include $(wildcard ../deps/*/include)
EBIN_DIRS := $(wildcard ../deps/*/ebin)
ERLC_FLAGS := -W $(INCLUDE_DIRS:../%=-I ../%) $(EBIN_DIRS:%=-pa %)

ifndef no_debug_info
  ERLC_FLAGS += +debug_info
endif

ifdef debug
  ERLC_FLAGS += -Ddebug
endif

EBIN_DIR := ../ebin
DOC_DIR  := ../doc
EMULATOR := beam

ERL_SOURCES := $(wildcard *.erl)
ERL_HEADERS := $(wildcard *.hrl) $(wildcard ../include/*.hrl)
ERL_OBJECTS := $(ERL_SOURCES:%.erl=$(EBIN_DIR)/%.$(EMULATOR))
ERL_DOCUMENTS := $(ERL_SOURCES:%.erl=$(DOC_DIR)/%.html)
ERL_OBJECTS_LOCAL := $(ERL_SOURCES:%.erl=./%.$(EMULATOR))
APP_FILES := $(wildcard *.app)
EBIN_FILES = $(ERL_OBJECTS) $(ERL_DOCUMENTS) $(APP_FILES:%.app=../ebin/%.app)
EBIN_FILES_NO_DOCS = $(ERL_OBJECTS) $(APP_FILES:%.app=../ebin/%.app)
MODULES = $(ERL_SOURCES:%.erl=%)

../ebin/%.app: %.app
	cp $< $@

$(EBIN_DIR)/%.$(EMULATOR): %.erl
	$(ERLC) $(ERLC_FLAGS) -o $(EBIN_DIR) $<

./%.$(EMULATOR): %.erl
	$(ERLC) $(ERLC_FLAGS) -o . $<

$(DOC_DIR)/%.html: %.erl
	$(ERL) -noshell -run edoc file $< -run init stop
	mv *.html $(DOC_DIR)
       

没什么好说的。

上面是服务器的脚本,客户端也是使用类似的makefile进行管理的,因为主要是说服务器的部分,因此,客户端的部分就不提了。下面是整个项目的目录结构:

1.目录结构:
netgame 主目录
|-- client 客户端目录
| `-- mobile 平台目录
| `-- phone 平台目录
| `-- j2me 平台目录
| |-- bin 可执行客户端目录
| |-- res 客户端资源目录
| |-- src 客户端源代码目录
| `-- temp 客户端脚本执行类是目录
`-- server 服务器目录
|-- doc 服务器文档目录
|-- ebin 服务器执行目录
|-- include 服务器程序include文件目录[暂时无用]
|-- makefile 服务器编译脚本
|-- src 服务器源代码目录
| `-- Makefile erlang源代码编译脚本
|-- start-dev.sh 服务器调试运行脚本
|-- start.sh 服务器运行脚本
`-- support 编译支持脚本目录
`-- include.mk 编译脚本支持文件
14 directories, 5 files

发布者

rix

如果连自己都不爱自己,哪还有谁来爱你