前言
最近在移植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