ProtoBuffer由.proto文件生成.cc/.h

一:编译源码
下载地址:http://code.google.com/p/protobuf/downloads/list 
下载后,根据编译说明进行编译。
windows 平台,直接打开msvc中的工程文件,直接编译。
unix/Linux平台,先进行configure,在make。

[下载和编译过程不详述,请看这里]

生成的结果中有库文件有:
libprotobuf.lib

libprotobuf-lite.lib

libprotoc.lib

可执行文件有:
protoc.exe

头文件:
根据提供的extract_includes.bat文件,提取公共头文件。

二:编写proto文件
根据需要,编写proto文件。

补充一条:如果想使用libprotobuf-lite.lib(会使二进制体积小一些),则在.proto文件的头部声明:

option optimize_for = LITE_RUNTIME;

三:生成头文件
编写完proto文件后,接下来,用protoc.exe生成.h和.cc文件。
命令如下:
protoc.exe -proto_path=SRC --cpp_out=DST SRC/checklist.proto 
其中--proto_path指出proto文件所在的目录,--cpp_out则是生成的代码文件要放的目录,最后的一个参数指出proto文件的路径。如上述命令中可以看出,将SRC目录下的addressbook.proto编译后放在DST目录下,应该会生成checklist.pb.h和checklist.pb.cc文件

四:Notepad++挂接ProtoBuffer代码生成器protoc

手动用proto文件生成.h/.cc文件比较麻烦,可以借用notepad++的插件一劳永逸

在插件菜单NppExec(如果没有就先装这个插件)->Execute弹出的对话框中输入以下信息

  1. "protoc.exe" --cpp_out $(CURRENT_DIRECTORY) --proto_path $(CURRENT_DIRECTORY) $(FULL_CURRENT_PATH)

protoc.exe的路径可以自己指定本机的绝对路径

编译出的文件将自动放置到proto文件所在目录

五:与工程进行集成
需要把生成的.h和.cc导入到工程中去,在需要用到数据解析的文件中,引用该.h文件。
需要把libprotobuf.lib(或libprotobuf-lite.lib)添加到项目的依赖库中。

补充一条:一般用vs编的时候,默认需要在.cpp/.cc文件头部加预编译头文件#include "stdafx.h",但这又会修改.cc文件(原则上生成的.h/.cc文件不要修改),所以解决的方法就是:在VS的solution explorer中右键checklist.pb.cc-->属性-->预编译头(precompiled header)->预编译头(precompiled header)-->选择“不使用预编译头”("not using precompiled headers")

六:推荐做法:
建立文件夹pbbuff,在其中创建3个子文件夹:bin,lib,include,其中:
bin 存放proto.exe文件 
lib 存放libprotobuf.lib 文件
include 存放公共头文件
创建环境变量PBROOT,指向pbbuff文件。把%PBROOT%/bin添加到系统的环境变量PATH中,以便能识别protoc命令。

【参考:http://yleesun.blog.163.com/blog/static/294134022011112102117958/】

最新文章

  1. Nginx 1.10.1 编译、配置文档(支持http_v2,TLSv1.2,openssl v1.0.2)
  2. java collection.sort()根据时间排序list
  3. rplidar测试
  4. Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向
  5. 批处理快速更改ip地址
  6. 编程思想┊从实例谈面向对象编程(OOP)、工厂模式和重构
  7. Python基本数据结构-字典-创建/访问/基本操作/格式化输出
  8. SVN备份教程(三)
  9. jstl if条件判断字符串代码
  10. Web Service学习之一:Web Service原理
  11. 机器学习之SVM(支持向量机)
  12. 基于ArcEngine与C#的鹰眼地图实现
  13. 两款web api 调试工具
  14. Servlet中获取JSP内置对象
  15. poj 1979 Red and Black(dfs)
  16. Qt学习之路MainWindow学习过程中的知识点
  17. Python中import机制
  18. RabbitMQ安装使用详解
  19. 解码escape类型的unicode
  20. js实现数组去重的几种方法

热门文章

  1. windows下libevent的编译及使用
  2. 手把手带你理解style
  3. Django 模型中DateField字段
  4. Cocos2d-x移植Android 常见问题处理办法
  5. 1.Jdeveloper打印出完整日志(-Djbo.debugoutput=console)
  6. 4springboot:日志(上)
  7. js 获取后台数据分页
  8. NodeJs——入门
  9. iOS之webview加载网页、文件、html的方法
  10. 一个hibernate中的异常:NonUniqueDiscoveredSqlAliasException