久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

在Windows上一鍵編譯各種版本的Protobuf

 學(xué)海無涯GL 2017-01-18

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

原理:protobuf 是google的一個開源項(xiàng)目,其源代碼在github上可以下載到,并且源碼都采用cmake來構(gòu)建,所以我們可以把源碼下載到本地,然后了利用cmake構(gòu)建本地工程,然后編譯.

步驟一:下載源碼

  復(fù)制以下代碼,保存到 download_protobuf_source.bat 文件中,運(yùn)行即可

復(fù)制代碼
::參考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默認(rèn)當(dāng)前操作系統(tǒng)已安裝 git 和 cmake,并配置好了環(huán)境變量
echo off & color 0A

::設(shè)置所需要的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
復(fù)制代碼

步驟二:編譯

  你可以利用cmake構(gòu)建你所需要的版本,下面的的例子是構(gòu)建并編譯一個VS2013版本的protobuf

  

  例:構(gòu)建VS2013版本

  復(fù)制以下代碼,保存到 build_VS.bat 文件,放到 download_protobuf_source.bat 同級目錄,然后執(zhí)行

  例如

 

復(fù)制代碼
::參考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默認(rèn)當(dāng)前操作系統(tǒng)已安裝 git 和 cmake,并配置好了環(huán)境變量
echo off & color 0A

::設(shè)置所需要的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%

::設(shè)置VS工具集,相當(dāng)于指定VS版本,取決于VS的安裝路徑
set VS_DEV_CMD="D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat"
::設(shè)置工程文件夾名字,用來區(qū)分不同的VS版本
set BUILD_PATH="build_VS2013"
::設(shè)置編譯版本 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%

::開始構(gòu)建和編譯
call %VS_DEV_CMD%
cmake ../../ -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%MODE%
call extract_includes.bat
nmake /f Makefile

echo %cd%
pause
復(fù)制代碼

當(dāng)然,你也可以的通過修改上面的的腳本來編譯你所需要的VS版本,具體的參數(shù)注釋的很詳細(xì)

當(dāng)進(jìn)度達(dá)到100%的時(shí)候,說明編譯完成

此時(shí),所有的東西都已經(jīng)生成,包括頭文件 和 lib文件

測試

  新建VS2013工程,設(shè)置好google/protobuf 頭文件目錄 和 lib庫目錄,鏈接到 libprotobuf.lib 或者 libprotobuf-lite.lib ,此處不贅述.

  新建 protocol.proto 文件,輸入以下協(xié)議,需要注意的是,一定要加入 syntax = "proto2" 指定語法規(guī)則版本,否則在執(zhí)行 protoc.exe 的過程中會報(bào)警告.如果不加也沒有影響,默認(rèn)為 proto2 的語法規(guī)則

復(fù)制代碼
// 指定語法規(guī)則 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;
}
復(fù)制代碼

  新建生成協(xié)議腳本 gen.bat ,輸入以下內(nèi)容

復(fù)制代碼
@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
復(fù)制代碼

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

  例如

 

輸入代碼:

 

復(fù)制代碼
#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;
}
復(fù)制代碼

 

注意事項(xiàng):在屬性面板中把運(yùn)行庫設(shè)置為 MT

編譯運(yùn)行,成功,結(jié)果如下

 附:編譯MinGW版本protobuf的腳本,與build_VS.bat大同小異

文件:build_MinGW.bat

內(nèi)容:

復(fù)制代碼
::參考文章 https://github.com/google/protobuf/blob/master/cmake/README.md
::默認(rèn)當(dāng)前操作系統(tǒng)已安裝 git 和 cmake 和 MinGW,并配置好了環(huán)境變量
echo off & color 0A

::設(shè)置所需要的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%


::設(shè)置工程文件夾名字
set BUILD_PATH="build_MinGW"
::設(shè)置編譯版本 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%

::開始構(gòu)建編譯
cmake ../../ -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=%MODE%
mingw32-make.exe
echo %cd%
pause
復(fù)制代碼

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多