erlang_protobuffs源码下载地址:
https://github.com/basho/erlang_protobuffs
因为这个项目是用rebar编译的,本人比较笨
,不会玩rebar,所以就提取了src文件夹里面的代码,自己写了个makefile来编译
下面就来记录一下我的实验步骤
1 创建项目目录结构
cd /data
mkdir -p protobuffs/{ebin,hrl,proto,scripts,src/{include,mod}}
2 导入源文件到src/mod目录下
3 这里有个注意事项:里面有protobuffs_parser.yrl和protobuffs_scanner.xrl文件,
有两种处理方法:
1 先编译成erl文件,然后下面的makefile编译规则就不用加上yrl和xrl(具体看makefile)
编译方法:
直接在src/mod目录下执行:
erlc protobuffs_parser.yrl protobuffs_scanner.xrl
或者运行erl环境
erl
yecc:file(protobuffs_parser).
leex:file(protobuffs_scanner).
2 不编译成erl文件,然后下面的makefile编译规则要加上yrl和xrl
模式规则
%.beam : %.erl %.yrl %.xrl
erlc $<
4 写makefile
1 inlcude.mk:放到hrl目录下
2 Makefile:在src目录下创建
3 在src/目录下,执行make
5 测试
1 在proto/目录下创建proto文件
2 在scripts目录下创建all.proto导入proto/目录下的所有proto文件
3 写个shell脚本控制生成proto
4 执行
5 为什么会报no_abstract_code错误呢,这涉及编译的问题,pokemon_db.beam要生成the form of abstract code 所以修改include.mk:
ERLC := erlc +debug_info(参考erlang手册里面的compile模块)
6 重新编译一次,然后再执行./create_erl_proto
6 最后,自己可以写个控制脚本来控制编译代码和生成proto。下面是我整理好的代码,有兴趣的可以下载看看。本人水平比较低,有问题谢谢指教
。