写个makefile编译erlang_protobuffs

erlang_protobuffs源码下载地址:
https://github.com/basho/erlang_protobuffs

  因为这个项目是用rebar编译的,本人比较笨 ,不会玩rebar,所以就提取了src文件夹里面的代码,自己写了个makefile来编译
写个makefile编译erlang_protobuffs_第1张图片

下面就来记录一下我的实验步骤
1 创建项目目录结构
cd /data
mkdir -p protobuffs/{ebin,hrl,proto,scripts,src/{include,mod}}


2 导入源文件到src/mod目录下
写个makefile编译erlang_protobuffs_第2张图片

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目录下
写个makefile编译erlang_protobuffs_第3张图片
  2 Makefile:在src目录下创建
写个makefile编译erlang_protobuffs_第4张图片
  3 在src/目录下,执行make
写个makefile编译erlang_protobuffs_第5张图片

5 测试
  1 在proto/目录下创建proto文件
写个makefile编译erlang_protobuffs_第6张图片
  2 在scripts目录下创建all.proto导入proto/目录下的所有proto文件

  3 写个shell脚本控制生成proto

  4 执行
写个makefile编译erlang_protobuffs_第7张图片
  5 为什么会报no_abstract_code错误呢,这涉及编译的问题,pokemon_db.beam要生成the form of abstract code 所以修改include.mk:
ERLC := erlc +debug_info(参考erlang手册里面的compile模块)
  6 重新编译一次,然后再执行./create_erl_proto
写个makefile编译erlang_protobuffs_第8张图片

6 最后,自己可以写个控制脚本来控制编译代码和生成proto。下面是我整理好的代码,有兴趣的可以下载看看。本人水平比较低,有问题谢谢指教

你可能感兴趣的:(makefile,protobuff)