在Windows上一键编译各种版本的Protobuf

所需工具 : cmake  for  windows 和  git for windows

原理:protobuf 是google的一个开源项目,其源代码在github上可以下载到,并且源码都采用cmake来构建,所以我们可以把源码下载到本地,然后了利用cmake构建本地工程,然后编译.

步骤一:下载源码

  复制以下代码,保存到 download_protobuf_source.bat 文件中,运行即可

::参考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默认当前操作系统已安装 git 和 cmake,并配置好了环境变量
echo off & color 0A

::设置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf
set PROTOBUF_VESION="3.0.0-beta-4"
echo %PROTOBUF_VESION%
set PROTOBUF_PATH="protobuf_%PROTOBUF_VESION%"
echo %PROTOBUF_PATH%

::从githug上拉取protobuf源代码
git clone -b %PROTOBUF_VESION% https://github.com/google/protobuf.git %PROTOBUF_PATH%

::从github上拉取gmock
cd %PROTOBUF_PATH%
git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock

::从github上拉取gtest
cd gmock
git clone -b release-1.7.0 https://github.com/google/googletest.git gtest

pause

步骤二:编译

  你可以利用cmake构建你所需要的版本,下面的的例子是构建并编译一个VS2013版本的protobuf

  

  例:构建VS2013版本

  复制以下代码,保存到 build_VS.bat 文件,放到 download_protobuf_source.bat 同级目录,然后执行

  例如

::参考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默认当前操作系统已安装 git 和 cmake,并配置好了环境变量
echo off & color 0A

::设置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf
::必须与下载的版本一致
set PROTOBUF_VESION="3.0.0-beta-4"
echo %PROTOBUF_VESION%
set PROTOBUF_PATH="protobuf_%PROTOBUF_VESION%"
echo %PROTOBUF_PATH%
cd %PROTOBUF_PATH%

::设置VS工具集,相当于指定VS版本,取决于VS的安装路径
set VS_DEV_CMD="D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat"
::设置工程文件夹名字,用来区分不同的VS版本
set BUILD_PATH="build_VS2013"
::设置编译版本 Debug Or Release
set MODE="Release"

cd cmake
if not exist %BUILD_PATH% md %BUILD_PATH%

cd %BUILD_PATH%
if not exist %MODE% md %MODE%
cd %MODE%

::开始构建和编译
call %VS_DEV_CMD%
cmake ../../ -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%MODE%
call extract_includes.bat
nmake /f Makefile

echo %cd%
pause

当然,你也可以的通过修改上面的的脚本来编译你所需要的VS版本,具体的参数注释的很详细

当进度达到100%的时候,说明编译完成

此时,所有的东西都已经生成,包括头文件 和 lib文件

测试

  新建VS2013工程,设置好google/protobuf 头文件目录 和 lib库目录,链接到 libprotobuf.lib 或者 libprotobuf-lite.lib ,此处不赘述.

  新建 protocol.proto 文件,输入以下协议,需要注意的是,一定要加入 syntax = "proto2" 指定语法规则版本,否则在执行 protoc.exe 的过程中会报警告.如果不加也没有影响,默认为 proto2 的语法规则

// 指定语法规则 proto2 or proto3
syntax = "proto2";

message Book
{
    optional string name = 1;
    optional int32 pages = 2;
    optional float price = 3;
}

message Student
{
    optional int32 age = 1;
    optional string name = 2;
    optional float score = 3;
    repeated Book arrBook = 4;
}

  新建生成协议脚本 gen.bat ,输入以下内容

@echo off & color 0A

:: protoc程序名
set "PROTOC_EXE=protoc.exe"
:: .proto文件名
set "PROTOC_FILE_NAME=protocol.proto"

set "PROTOC_PATH=%cd%"
set "CPP_OUT_PATH=%cd%"

::生成.h和.cc
"%PROTOC_PATH%\%PROTOC_EXE%" --proto_path="%PROTOC_PATH%" --cpp_out="%CPP_OUT_PATH%" "%PROTOC_PATH%\%PROTOC_FILE_NAME%"
pause

  把生成的 protocol.pb.h 和 protocol.pb.cc 加入到刚才的工程

  例如

输入代码:

#include <stdio.h>
#include <stdint.h>
#include "protocol.pb.h"
int32_t main()
{
    Student *student1 = new Student();
    student1->set_age(1);
    student1->set_name("tom");
    student1->set_score(98.5);
    for (uint32_t i = 0; i < 5; ++i)
    {
        char name[32] = { 0 };
        sprintf_s(name, 32, "book_%d", i);
        Book *pBook = student1->add_arrbook();
        pBook->set_name(name);
        pBook->set_price(1.2f * (i + 1));
        pBook->set_pages((i + 1) * 15);
    }
    //printf("%s\n", student1->DebugString().c_str());
    char buf[1024] = {0};
    int32_t len = student1->ByteSize();
    student1->SerializeToArray(buf, len);
    printf("btye size = %d\n", len);

    Student student2;
    student2.ParseFromArray(buf, len);
    printf("%s\n", student2.DebugString().c_str());
    getchar();
    return 0;
}

注意事项:在属性面板中把运行库设置为 MT

编译运行,成功,结果如下

附:编译MinGW版本protobuf的脚本,与build_VS.bat大同小异

文件:build_MinGW.bat

内容:

::参考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默认当前操作系统已安装 git 和 cmake 和 MinGW,并配置好了环境变量
echo off & color 0A

::设置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf
::必须与下载的版本一致
set PROTOBUF_VESION="3.0.0-beta-4"
echo %PROTOBUF_VESION%
set PROTOBUF_PATH="protobuf_%PROTOBUF_VESION%"
echo %PROTOBUF_PATH%
cd %PROTOBUF_PATH%

::设置工程文件夹名字
set BUILD_PATH="build_MinGW"
::设置编译版本 Debug Or Release
set MODE="Release"

cd cmake
if not exist %BUILD_PATH% md %BUILD_PATH%

cd %BUILD_PATH%
if not exist %MODE% md %MODE%
cd %MODE%

::开始构建编译
cmake ../../ -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=%MODE%
mingw32-make.exe
echo %cd%
pause
时间: 2024-12-18 21:58:43

在Windows上一键编译各种版本的Protobuf的相关文章

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器  大 | 中 | 小  [ 2011-3-30 08:40 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.zyan.cc/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 L

netcdf源码在windows上的编译

作者:朱金灿 来源:http://blog.csdn.net/clever101 今天搞搞netcdf源码在windows上的编译,折腾了半天,算是搞成了,特地记录一下过程.我的目标是要生成netcdf的工程文件.netcdf依赖于hdf5.zlib和curl这三个库. 首先在HDF5 Source Code下载最新的hdf5源码,然后使用CMake来生成编译hdf5的解决方案,如下图: 再下载netcdf的源码:NetCDF Downloads,开始使用CMake来生成netcdf的解决方案,

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(图文并茂,还有实例下载)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program

在windows上Matlab 编译MatConvNet

windows 10 64 bits matlab 2015b/2016a MatConvNet 1.0-beta20 或者从github 下载GIT repository CUDA GPU Computing ToolKit 7.5 cudnn-rc4/cudnn-rc5 都按照官网http://www.vlfeat.org/matconvnet/ 配置好了之后, 编译命令 vl_compilenn('enableGpu', true, ... 'cudaRoot','C:\Program F

windows 上 怎样编译 php 和 xdebug的 源代码

网上有很多的php源代码编译介绍,但是几乎没有xdebug 的源码编译的介绍,我这里结合自己的实际操作来谈一下,其中也会涉及到apache源代码的编译. 1. php编译 我们以vs2008来作为编译工具:其他还需要php的编译套件,这个可在php官方网下载http://windows.php.net/downloads/php-sdk/,下载这个吧: php-sdk-binary-tools-20110915.zip 假设把它释放到e:\php-sdk目录下 从开始菜单进入command-li

windows上一键自动安装zabbix-agent

一.简介 zabbix是开源界流行的监控程序,C/S架构,运行多种系统平台安装,个人认为windows平台的 zabbix-agent安装最为烦琐,unix及linux平台通过自动化运维工具可一键远程安装,而windows目前没有好的方法,所以就参考网上写了一个脚本(包含zabbix-agent 2.4.5客户端),一键安装并配置好防火墙. 二.安装脚本(配置文件) 请先修改脚本中zabbbix_server 为自己的zabbix服务器ip @Echo off setlocal enablede

在windows上自动备份SVN版本库及定时删除

下面的脚本是在windows SVN的备份策略,采用的是hotcopy的方法 方案一: 1.先创建一个fullBackup的脚本:fullBackup.bat echo off rem Subversion的安装目录 set SVN_HOME="D:\Program Files\Subversion\bin" rem 所有版本库的父目录 set SVN_ROOT=D:\svnserver rem 备份的目录 set BACKUP_SVN_ROOT=D:\backupsvn\fullba

Agg:Windows上GCC编译Agg

本文记录用TDM64-GCC(MingGW的变种)编译Agg2.5的过程.操作系统win8.1 64位,编译器TDM64-gcc. 首先,TDM64-GCC只提供了一套编译环境,还有一些posix命令没有提供,例如ls,rm等,简单的办法就是装Git,有一个选项,会提供这些工具.解压agg2.5,将Makefile.in.MINGW32_NT-5.1复制一份,重命名为Makefile.in.MINGW32_NT-6.1,然后,直接编译就可以过: cd agg-2.5 make 因为是64位编译器