写个makefile编译erlang_protobuffs

本文介绍如何从源码编译Erlang ProtoBufs,并提供了一个详细的步骤说明,包括项目目录结构创建、源文件导入、编译过程及解决常见问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

因为这个项目是用rebar编译的,本人比较笨 :cry: ,不会玩rebar,所以就提取了src文件夹里面的代码,自己写了个makefile来编译
[img]http://dl2.iteye.com/upload/attachment/0106/6953/a5ac9e7c-0e08-3fbe-bc2a-f34fc5b72559.png[/img]

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


2 导入源文件到src/mod目录下
[img]http://dl2.iteye.com/upload/attachment/0106/6969/6607e863-05ed-38c0-9d36-39df9e300480.png[/img]

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目录下
[img]http://dl2.iteye.com/upload/attachment/0106/7004/bfb490e9-0978-3be7-9905-090a59f7d72e.png[/img]
2 Makefile:在src目录下创建
[img]http://dl2.iteye.com/upload/attachment/0106/7006/7af3440f-d42e-3248-a2c5-dec1404bd60a.png[/img]
3 在src/目录下,执行make
[img]http://dl2.iteye.com/upload/attachment/0106/7008/7d1213be-07a7-3abf-bb7a-c3dab67ffae9.png[/img]

5 测试
1 在proto/目录下创建proto文件
[img]http://dl2.iteye.com/upload/attachment/0106/7028/7bede112-5910-38f1-af77-2f1ac325879f.png[/img]
2 在scripts目录下创建all.proto导入proto/目录下的所有proto文件
[img]http://dl2.iteye.com/upload/attachment/0106/7030/704d3ea0-553c-3a53-b8fc-dcf13f621cd1.png[/img]
3 写个shell脚本控制生成proto
[img]http://dl2.iteye.com/upload/attachment/0106/7032/8ac0f339-bafb-3bdc-97cb-8b45705cf0c0.png[/img]
4 执行
[img]http://dl2.iteye.com/upload/attachment/0106/7034/69f2cbfc-536d-36d2-8648-1eed86b07f7c.png[/img]
5 为什么会报no_abstract_code错误呢,这涉及编译的问题,pokemon_db.beam要生成the form of abstract code 所以修改include.mk:
ERLC := erlc +debug_info(参考erlang手册里面的compile模块)
6 重新编译一次,然后再执行./create_erl_proto
[img]http://dl2.iteye.com/upload/attachment/0106/7040/ca58391e-b95f-3f1b-860e-0a2ba10c314c.png[/img]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值