linux下protobuf 下载并cmake编译安装全过程脚本

protobuf源码下载

github上下载最新版本的protobuf源码zip包,并解压缩到本地 fetch_protobuf.sh

#!/bin/bash

shell_folder=$(cd "$(dirname "$0")";pwd)
pushd $shell_folder
#如果指定的文件/文件夹存在则删除,删除失败则中止脚本
remove_if_exist(){
    if [ $# -eq 1 ]
    then
        if [ -e $1 ]
        then
            rm $1 -fr
            if [ ! $? -eq 0 ]
            then
                exit -1
            fi
        fi
        return 0
    else 
        echo invalid argument:
        echo $*
        exit -1
    fi
}
exit_on_error(){
  if [ ! $? -eq 0 ]
  then
    exit -1
  fi
}
# 如果文件存在且checksum与$2指定的md5相等则返回 1,否则返回0
# $1 待检查的文件路径
# $2 md5校验码
need_download(){
  if [ $# -eq 2 ]
    then
      if [ -f $1 ]; then
        echo "File already exists. Checking md5..."
        os=`uname -s`
        if [ "$os" = "Linux" ]; then
          checksum=`md5sum $1 | awk '{ print $1 }'`
        elif [ "$os" = "Darwin" ]; then
          checksum=`cat $1 | md5`
        fi
        if [ "$checksum" = "$2" ]; then
          echo "Checksum is correct. No need to download $1."
          return 1
        else
          echo "Checksum is incorrect. Need to download again $1"                
        fi
    else
      return 0
    fi
  else 
    echo invalid argument:
    echo $*
    exit -1
  fi
}
# 从github上下载源码,如果本地不存在指定的zip包,或md5校验码不匹配则从github下载
# $1 项目名称
# $2 版本号
# $3 zip文件的md5
# $4 项目所有者名称
# $5 zip包文件名前缀
download_from_github(){
  if [ $# -eq 5 ]
  then
    project_folder="$1-$2"
    project_package="$project_folder.zip"
    if need_download $project_package $3
    then
      echo "(下载源码)downloading $1 $2 source"
      wget --no-check-certificate https://github.com/$4/$1/archive/$5$2.zip -O $project_package
      exit_on_error
    fi
    remove_if_exist $project_folder
    unzip $project_package
    exit_on_error
  else
    echo invalid argument:
    echo $*
    exit -1
  fi
}

download_from_github "protobuf" "3.3.1" "9377e414994fa6165ecb58a41cca3b40" "google" "v"

popd

protobuf编译安装

对下载的protobuf源码编译并安装到release/protobuf_linux_x86_64文件夹下 build_protobuf.sh

#!/bin/bash
GXX_PATH="-DCMAKE_BUILD_TYPE:STRING=RELEASE"
INSTALL_FOLDER=$(dirname $(readlink -f $0))/release/protobuf_linux_x86_64
pushd protobuf-3.3.1
echo INSTALL_FOLDER:$INSTALL_FOLDER
if [ -d build.gcc ]
then 
    rm -fr build.gcc/*
else 
    mkdir build.gcc
fi
pushd build.gcc
cmake ../cmake $GXX_PATH -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$INSTALL_FOLDER  -Dprotobuf_BUILD_TESTS=off
# 编译并安装protobuf到指定的文件夹
make install
popd
rm -fr build.gcc
popd

上面的脚本中在调用cmake生成Makefile时定义了protobuf_BUILD_TESTS=off,这是因为protobuf的CMakeLists.txt中默认定义protobuf_BUILD_TESTS=on, 而当protobuf_BUILD_TESTS=on时,需要gmock支持(https://github.com/google/googlemock),否则cmake会报如下错误:

CMake Error at tests.cmake:2 (message): Cannot find gmock directory.

gmock是google公司推出的一款开源的白盒测试工具,对于我们一般的应用来说,不需要gmock提供的功能,所以这里可以将protobuf_BUILD_TESTS=off,避免麻烦。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏李蔚蓬的专栏

VMware Workstation14.1.3 & Ubuntu18.04从安装到实用的填坑之路

本机VMware Workstation环境是上学期安装的,拿的老师给的安装包,版本10.0.1。顺便装了个Ubuntu15.10。

881
来自专栏软件

轻松十余步,测试不再愁!

“测试不息,Coding不止”,对于每天需要跟茫茫代码、万千算法打交道的测试人员来说,测试起来真心不容易!比如, 一个不留神就可能放走一个bug; 一个慢动作就...

2239
来自专栏运维

vSphere初体验之vCenter的安装

物理机:DELL  IPTIPLEX 990 PC机 I52400处理器支持VT功能  8G内存 千兆网卡

632
来自专栏Petrichor的专栏

车载网络: OMNeT++安装CAN协议

首先要保证已安装好 OMNeT++。具体安装教程可参照 Ubuntu: 安装 OMNeT++ 仿真工具 。

1276
来自专栏程序你好

.net程序源代码如何避免被反编译

862
来自专栏生信技能树

perl模块安装大全

今天又有小伙伴微信问我perl模块安装的问题,因为ENSEMBL发布的大多数数据库以及软件都是基于perl的,尤其是分量很重的VEP,所以即使你再如何如何的讨厌...

3687
来自专栏还债之路

使用vsftp作为集群的yum仓库

Linux nfs01 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86...

822
来自专栏bboysoul

如何黑入安卓手机(ezsploit)

安装很简单clone git clone https://github.com/rand0m1ze/ezsploit.git cd ezsploit ch...

942
来自专栏Java帮帮-微信公众号-技术文章全总结

02.Linux安装

02.Linux安装 Linux 安装 本章节我们将为大家介绍Linux的安装。 本章节以 centos6.4 为例。 centos 下载地址: 可以去官网下载...

44211
来自专栏Growth Hack

推荐一款开源、免费的标记语言转换工具,各种文档格式自由转换

Pandoc 是由 John MacFarlane 开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的「瑞士军刀」。Pandoc 使用 Ha...

740

扫码关注云+社区