protoc编译1
# 编译所有的 .proto 文件
$ protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/*.proto
# 这之后就会得到 *.proto.h 和 *.proto.cc,就可以随便拿到 c++ 项目去使用了
cmake编译2.3
==主角:protobuf_generate_cpp==
举个最简单的例子
ps: `CMAKE_CURRENT_BINARY_DIR`和 `PROJECT_BINARY_DIR` 是一个目录,都是用户当前的build文件夹,也就是运行cmake时所处的文件夹(不是CMakeLists.txt所在的文件夹!)# 工作目录
.
├── CMakeLists.txt
├── demo.proto
├── add_person.cc
├── list_people.cc
├── addressbook.proto
project(proto_example)
# Find required protobuf package
find_package(protobuf CONFIG REQUIRED)
if(protobuf_VERBOSE)
message(STATUS "Using Protocol Buffers ${protobuf_VERSION}")
else()
message(FATAL_ERROR "Protobuf Not Found!")
endif()
add_compile_options(-O0)
# syntax: protobuf_generate_cpp(生成的.cc文件名 生成的.h文件名 来源.proto文件)
## 默认名字生成规则:demo.proto.h demo.proto.cc
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS demo.proto)
## 默认名字生成规则:demo.proto.h demo.proto.cc
## 指定名字(这种只做演示用,后续不再使用这里面生成的 .h .cc)
foreach(example add_person list_people)
## set 命令创建列表
set(${example}_SRCS ${example}.cc)
set(${example}_PROTOS addressbook.proto)
#Code Generation
if(protobuf_MODULE_COMPATIBLE) #Legacy Support
protobuf_generate_cpp(${example}_PROTO_SRCS ${example}_PROTO_HDRS ${${example}_PROTOS})
# 为列表 ${example}_SRCS 追加元素
list(APPEND ${example}_SRCS ${${example}_PROTO_SRCS} ${${example}_PROTO_HDRS})
endif()
## 指定名字
add_library(proto_example SHARED ${PROTO_SRCS})
target_link_libraries(proto_example ${PROTOBUF_LIBRARIES})