编译前工作
需要先安装好protocol buffer
库并配置好环境变量,请参考protocol buffer之linux编译。
解压源码,例如:protobuf-c.zip
到目录/home/workspace/protobuf-c
,通过终端进入,输入命令:
./autogen.sh
生成configure
文件。
在父目录创建构建目录,例如:/home/workspace/protobuf-c_build
,通过终端进入构建目录,输入命令:
./../protobuf-c/configure --prefix=/opt/protobuf-c-linux
编译源码
配置成功后,输入命令:make
,成功后,输入命令:make install
,即可把protobuf-c库安装到目录:/opt/protobuf-c-linux
。
使用示例
创建工程目录,例如:/home/workspace/test_protobuf_c
,把/opt/protobuf-c-linux
拷贝到该目录下。
在工程目录创建proto-in
目录用于存放.proto
协议文件,创建工具脚本gen_proto.sh
,内容如下:
#!/bin/bash
#.proto文件路径
SOURCE_PATH="proto-in"
#.c文件输出路径
OUTPUT_PATH="proto-out"
#protoc-c路径
PROTOC=protobuf-c-linux/bin/protoc-c
#判断输出路径是否存在,不存在则创建
if [ ! -d $OUTPUT_PATH ]; then
mkdir $OUTPUT_PATH
fi
#遍历.proto文件,并生成C文件
echo "Start Generate C Files ..."
echo
echo ".proto defined Path:" $SOURCE_PATH
echo "C Files Output Path:" $OUTPUT_PATH
echo
for file in $SOURCE_PATH/*; do
echo "..." ${file##*/} " -> " $(basename $file .proto)".pb-c.h " $(basename $file .proto)".pb-c.c"
$PROTOC --proto_path=$SOURCE_PATH --c_out=$OUTPUT_PATH ${file##*/}
sed -i 's/#include <protobuf-c\/protobuf-c.h>/#include <protobuf-c-linux\/include\/protobuf-c\/protobuf-c.h>/' $OUTPUT_PATH/$(basename $file .proto).pb-c.h
done
echo
echo "Well Done."
运行命令:./gen_proto.sh
将会自动根据proto-in
目录下的所有.proto
协议定义文件在proto-out
目录下生成相应的C
源码文件。