环境设置

项目地址

https://github.com/silvermagic/ProtoBufDev.git

操作系统

64位 Fedora 24

安装protobuf

$ git clone https://github.com/google/protobuf.git
$ cd protobuf/
$ ./autogen.sh
$ ./configure
$ make -j8
$ sudo make install
### 设置pkg-config查找路径
$ tail -n 8 .bash_profile PKG_CONFIG_PATH=/usr/local/lib/pkgconfig export PKG_CONFIG_PATH LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH
$ source ~/.bash_profile

工程目录结构(模板)

$ ls
build CMakeLists.txt proto reader.cpp README.txt writer.cpp
$ cat CMakeLists.txt
#cmake的最低版本
cmake_minimum_required(VERSION 2.8) #工程名
project(protobuf) include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif() #遍历当前目录及子目录获取所有源文件
file(GLOB SRC "${CMAKE_CURRENT_SOURCE_DIR}/*.cc")
file(GLOB WSRC "${CMAKE_CURRENT_SOURCE_DIR}/writer.cpp")
file(GLOB RSRC "${CMAKE_CURRENT_SOURCE_DIR}/reader.cpp") #设置源文件列表
add_executable(writer ${WSRC} ${SRC})
add_executable(reader ${RSRC} ${SRC}) #dependencies
INCLUDE(FindPkgConfig)
#使用pkg-config寻找protobuf库的include目录以及库
pkg_check_modules(PROTOBUF REQUIRED protobuf)
include_directories(${PROTOBUF_INCLUDE_DIRS})
link_directories(${PROTOBUF_LIBRARY_DIRS})
#设置链接库
target_link_libraries(writer ${PROTOBUF_LIBRARIES})
target_link_libraries(reader ${PROTOBUF_LIBRARIES}) #新增自定义命令pb和cls
add_custom_target(pb
COMMAND protoc -I=${CMAKE_CURRENT_SOURCE_DIR}/proto --cpp_out=${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto
)
add_custom_target(cls
COMMAND rm -rf ${CMAKE_CURRENT_SOURCE_DIR}/*.pb.*
)

编译运行项目(模板)

$ mkdir build
$ cd build
$ cmake ..
$ make clean
$ make cls
$ make pb
$ make
$ ./writer
$ ./reader

规范

proto文件名使用小写字母加下划线的组合方式

最新文章

  1. 公钥私钥和RSA算法
  2. windows批处理总结
  3. block 页面传值小结
  4. asp.net MD5 加密
  5. overflow样式修改插件——jscrollpane
  6. 【转】linux线程模型
  7. Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
  8. .offset()与.position()区别
  9. MVC多语言应用
  10. Jenkins启动、停止脚本
  11. Windows WMIC命令使用详解(附实例)
  12. DataOutputStream and DataInputStream
  13. mybatis二级缓存详解
  14. 20165220 Java第四周学习总结
  15. 串口-CreateFile的使用
  16. LiveCharts文档-4基本绘图-2基本柱形图
  17. 关于php-fpm方式和apache配合使用的几点记录
  18. vw 解决方案
  19. Spring Boot + Spring Cloud 实现权限管理系统 (集成 Shiro 框架)
  20. thinkphp 参数传递方式(基础)

热门文章

  1. Git_错误_02_error: src refspec master does not match any
  2. Vue从接口请求数据
  3. 嵌套list的实例化
  4. docker 安装与常用命令与常用容器(containers)环境
  5. NYOJ-求逆序数 ----------------待解决,WA
  6. [转]阮一峰:理解RESTful架构
  7. Parallel Programming-使用CancellationTokenSource调度并行运行的Task
  8. 数据库JSON字段设计思路
  9. git导入项目
  10. centos7添加环境变量