贵州企业网站建设策划,开发网站可用性监控,网站清除黑链,信息网络安全protobuf自定义数据格式#xff0c;CMake编译文件读写自定义数据 1.protobuf安装2.定义.proto文件3.编写main.cpp4.编写CMAkeLists配置文件5.运行 1.protobuf安装 protobuf库链接
2.定义.proto文件
新建一个Person.proto文件和一个Animal.proto文件#xff0c;内容如下CMake编译文件读写自定义数据 1.protobuf安装2.定义.proto文件3.编写main.cpp4.编写CMAkeLists配置文件5.运行 1.protobuf安装 protobuf库链接
2.定义.proto文件
新建一个Person.proto文件和一个Animal.proto文件内容如下
syntax proto3;package UserInfo;message Person {string name 1;int32 id 2;string email 3;
}syntax proto3;package UserInfo;message Animal {string name 1;int32 id 2;int32 age 3;
}3.编写main.cpp
main函数中对proto中的对象进行序列化和反序列化内容如下
#include Animal.pb.h
#include Person.pb.h
#include fstream
#include iostreamint main() {{// 创建 Person 对象UserInfo::Person person;person.set_name(John Doe);person.set_id(123);person.set_email(john.doeexample.com);// 将数据序列化到文件std::ofstream output(person_data, std::ios::binary);person.SerializeToOstream(output);output.close();// 从文件中读取数据并反序列化UserInfo::Person read_person;std::ifstream input(person_data, std::ios::binary);read_person.ParseFromIstream(input);input.close();// 打印反序列化后的数据std::cout Name: read_person.name() std::endl;std::cout ID: read_person.id() std::endl;std::cout Email: read_person.email() std::endl;}{ // 创建 Animal 对象UserInfo::Animal animal;animal.set_name(Dog);animal.set_id(456);animal.set_age(5);// 将数据序列化到文件std::ofstream output(animal_data, std::ios::binary);animal.SerializeToOstream(output);output.close();// 从文件中读取数据并反序列化UserInfo::Animal read_animal;std::ifstream input(animal_data, std::ios::binary);read_animal.ParseFromIstream(input);input.close();// 打印反序列化后的数据std::cout Name: read_animal.name() std::endl;std::cout ID: read_animal.id() std::endl;std::cout age: read_animal.age() std::endl;}return 0;
} ems;注意这时候我们的main.cpp文件是报错的因为找不到Animal.h文件和Person.h文件没关系接下来编辑CMAkeLists.txt配置文件生成相应的头文件即可
4.编写CMAkeLists配置文件
cmake_minimum_required(VERSION 3.5)
project(YourProjectName)set(CMAKE_CXX_STANDARD 11)# 查找protobuf库
find_package(Protobuf REQUIRED)# 获取所有的protobuf文件
file(GLOB PROTO_FILES proto/*.proto)# 生成protobuf文件的C代码
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})# 添加生成的protobuf文件到项目中
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${PROTOBUF_INCLUDE_DIRS})# 添加可执行文件
add_executable(main main.cpp ${PROTO_SRCS} ${PROTO_HDRS})# 链接protobuf库
target_link_libraries(main ${PROTOBUF_LIBRARIES})5.运行
mkdir build
cd build
cmake ..
make
./main结果如下