49 lines
1.8 KiB
CMake
49 lines
1.8 KiB
CMake
cmake_minimum_required(VERSION 3.8)
|
|
project(agv_calib_brain)
|
|
|
|
# 1. 寻找 ROS 2 依赖
|
|
find_package(ament_cmake REQUIRED)
|
|
find_package(rclcpp REQUIRED)
|
|
|
|
# 2. 寻找 gRPC 和 Protobuf 依赖
|
|
find_package(Protobuf REQUIRED)
|
|
find_package(gRPC REQUIRED)
|
|
|
|
# 3. 设置 Proto 文件路径与自动生成的源码输出路径
|
|
set(PROTO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/proto")
|
|
set(PROTO_FILE "${PROTO_DIR}/agv_calib_control.proto")
|
|
set(PROTO_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/grpc_gen")
|
|
file(MAKE_DIRECTORY ${PROTO_OUT_DIR})
|
|
|
|
# 4. 自动生成 gRPC C++ 源码 (每次 colcon build 自动执行)
|
|
find_program(GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
|
|
add_custom_command(
|
|
OUTPUT "${PROTO_OUT_DIR}/agv_calib_control.pb.cc"
|
|
"${PROTO_OUT_DIR}/agv_calib_control.pb.h"
|
|
"${PROTO_OUT_DIR}/agv_calib_control.grpc.pb.cc"
|
|
"${PROTO_OUT_DIR}/agv_calib_control.grpc.pb.h"
|
|
COMMAND protoc
|
|
ARGS --proto_path="${PROTO_DIR}"
|
|
--cpp_out="${PROTO_OUT_DIR}"
|
|
--grpc_out="${PROTO_OUT_DIR}"
|
|
--plugin=protoc-gen-grpc="${GRPC_CPP_PLUGIN_EXECUTABLE}"
|
|
"${PROTO_FILE}"
|
|
DEPENDS "${PROTO_FILE}"
|
|
)
|
|
|
|
# 5. 将生成的网络源码打包成独立的 C++ 库
|
|
add_library(agv_grpc_proto_lib SHARED
|
|
"${PROTO_OUT_DIR}/agv_calib_control.pb.cc"
|
|
"${PROTO_OUT_DIR}/agv_calib_control.grpc.pb.cc"
|
|
)
|
|
target_include_directories(agv_grpc_proto_lib PUBLIC "${PROTO_OUT_DIR}")
|
|
target_link_libraries(agv_grpc_proto_lib gRPC::grpc++ protobuf::libprotobuf)
|
|
|
|
# 6. 编译您的 ROS 2 节点主程序
|
|
add_executable(brain_node src/brain_node.cpp)
|
|
ament_target_dependencies(brain_node rclcpp)
|
|
# 🚨 必须链接刚才生成的 gRPC 库
|
|
target_link_libraries(brain_node agv_grpc_proto_lib)
|
|
|
|
install(TARGETS brain_node DESTINATION lib/${PROJECT_NAME})
|
|
ament_package() |