Protocol Buffer学习教程之编译器与类文件(三)

Protocol Buffer学习教程之编译器与类文件(三)

1. 概述

在前面两篇中,介绍了Protobuf的基本概念、应用场景、与protobuf的语法等。在此篇中将介绍如何自己编译protobuf的库,不同Visual Studio之间的protobuf库一般不能通用,会有兼容性问题,下面我们将讲解,如何获取对应Visual Studio版本的protobuf库与编译器。

Protocol Buffer学习教程之编译器与类文件(三)

2. 环境准备

编译protobuf需要工具CMake(下载链接)与Visual Studio 2012版本或者更高版本(下载链接)。下载CMake的Windows版本,安装后在命令行中输入CMake命令,如果提示相关用法,说明安装CMake成功,如下:

关于Visual Studio的安装在此不作讲解。

Protobuf源码的下载,参见《Protocol Buffer学习教程之开篇概述(一)》。

3. 编译源码

打开Protobuf源码下的Cmake\Readme.md文件,此文件将详细介绍编译库文件的步骤。

以VS2015为例,在开始菜单中找到VS2015 x64 Native Tools Command Prompt工具,打开工具,如图:

Protocol Buffer学习教程之编译器与类文件(三)

然后进入到protobuf文件的cmake目录,然后创建build目录,并进入build目录:

C:\Path\to\protobuf\cmake>mkdir build & cd build

C:\Path\to\protobuf\cmake\build>

配置release版本:再在build目录创建release目录,并进入到release目录,关执行cmake命令:

C:\Path\to\protobuf\cmake\build>mkdir release & cd release

C:\Path\to\protobuf\cmake\build\release>cmake -G "NMake Makefiles" ^

-DCMAKE_BUILD_TYPE=Release ^

-DCMAKE_INSTALL_PREFIX=../../../../install ^

../..

配置debug版本:回到build目录,再在build目录创建debug目录,并进入到debug目录,关执行cmake命令:

C:\Path\to\protobuf\cmake\build>mkdir debug & cd debug

C:\Path\to\protobuf\cmake\build\debug>cmake -G "NMake Makefiles" ^

-DCMAKE_BUILD_TYPE=Debug ^

-DCMAKE_INSTALL_PREFIX=../../../../install ^

../..

生成Visual Studio工程文件:回到上一级目录,创建solution目录,然后进入到此目录,此步骤很关键,通过此命令来生成不同版本的工程,在命令窗口输入cmake --help命令,来查看相关的参数,支持生成的VS工程版本。执行以下文件:

C:\Path\to\protobuf\cmake\build>mkdir solution & cd solution

C:\Path\to\protobuf\cmake\build\solution>cmake -G "Visual Studio 12 2013 Win64" ^

-DCMAKE_INSTALL_PREFIX=../../../../install ^

../.. -Dprotobuf_BUILD_TESTS=OFF

生成32位的话,把命令中的Win64去掉,要生成不同版本的VS工程的话,修改“Visual Studio 12 2013”。

最后编译库:release版本,执行命令:

C:\Path\to\protobuf\cmake\build\release>nmake

Debug版本,执行命令:

C:\Path\to\protobuf\cmake\build\debug>nmake

或者直接用VS打开solution目录下的工程编译即可。

4.测试生成的编译器

生成自己的类

如果想把你的proto文件生成Java,Python或者C++代码,你需要通过protoc编译器来编译proto文件,如果没有安装proto编译器,可以从下载download the package下载后,根据README文件的步骤处理即可。

编译器使用方法如下,发命令窗口输入如下格式命令:

protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR path/to/file.proto

protoc为编译器。以cmd窗口输入完整路径,或者直接把proto执行文件拖拽进入cmd窗口即可。

IMPORT_PATH为被包含文件的查找路径,如被编译的proto文件有import指令时,需要查找被包含的文件,就是通过此参数指定的路径来查找。如果有多个目录,可以通过--proto_path多次指定,编译器将按顺序查找。-I=IMPORT_PAT

H为—proto_path的简写。

你可以提供一个或者多个文件输出路径

--cpp_out指在DST_DIR目录下生成C++代码,更多内容参见C++ generated code reference

--java_out指在DST_DIR目录下生成java代码,更多内容参见Java generated code reference

--python_out指在DST_DIR目录下生成python代码,更多内容参见Python generated code reference

作为额外的约定,DST_DIR如果以.zip或者.jar结尾的话,编译器将输入一个.zip格式文件,.jar的话将输出一个java jar声明必须的manifest文件。如果归档文件已经存在的话,将被覆盖。

一次可以指定多个.proto文件作为输入文件,但是必须每个文件用IMPORT_

PATH格式引入,尽管所有文件都在同一目录下也一

上一篇:os.path分割文件路径


下一篇:文件夹 操作