【C++】Protobuf与Cmake的使用

前言

最近在移植apollo7.0.0代码时,遇到跨文件夹import依赖Proto文件,采用以前小项目的方式无法成功生成.cc和.h文件,耗费2-3天时间解决,故记录。

文件夹与子文件夹内部依赖(小项目)

  • 项目目录如下:
.
├── CMakeLists.txt
├── PathBackup.proto
├── PathCurrent.proto
├── PathNode.proto
├── PathRouting.proto
├── adas.proto
├── bag_manager.proto
├── behaviors_decision.proto
├── caliLidar.proto
├── chassis.proto
├── control_command.proto
├── hadmap_traffic_light.proto
├── header.proto
├── lane_mark.proto
├── v2x
│   ├── AccelerationSet4Way_PB.proto
│   ├── BSM_PB.proto
│   ├── BasicSafetyMessage_PB.proto
│   ├── BrakeSystemStatus_PB.proto
│   ├── DDateTime_PB.proto
│   ├── EventSource_PB.proto

v2x/ 依赖上层目录的header.proto文件,比如:
import路径仅包含文件名即可

syntax = "proto2";
package common;
import "header.proto";
import "BasicSafetyMessage_PB.proto";

message BSM_PB {
        required BasicSafetyMessage_PB bsmFrame =1;
        optional common.Header header = 2;
}

CMakeLists如下:

  • CPP
cmake_minimum_required(VERSION 3.5)
project(common_proto)
find_package(Protobuf REQUIRED)
set(proto_dir ${CMAKE_CURRENT_SOURCE_DIR})
file(GLOB proto_files "${proto_dir}/*.proto")
file(GLOB proto_files_2 "${proto_dir}/v2x/*.proto")
list(APPEND proto_files ${proto_files_2})

set(proto_gen_cpp_dir ${CMAKE_CURRENT_SOURCE_DIR})

# Create lists of files to be generated
set(proto_gen_cpp_files "")
foreach(proto_file ${proto_files})
  get_filename_component(proto_name ${proto_file} NAME_WE)
  list(APPEND proto_gen_cpp_files
    ${proto_gen_cpp_files}/${proto_name}.pb.cc
  )
endforeach(proto_file ${proto_files})

# Run protoc and generate language-specific headers.
add_custom_command(
  OUTPUT ${proto_gen_cpp_files}
  COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
    --proto_path=${proto_dir_2}
    --proto_path=${proto_dir}
    --cpp_out=${proto_gen_cpp_dir} ${proto_files}
  DEPENDS ${PROTOBUF_PROTOC_EXECUTABLE} ${proto_files}
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_source_files_properties(${proto_gen_cpp_files} PROPERTIES 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值