应用场景
机器人上使用ROS工程,机器人需要和APP网络通讯,通讯协议用protobuf协议。所以需要在ROS工程中用cmake组织protobuf。
解决办法
package目录下新建proto文件夹,涉及的proto文件放在该文件夹下,同时生成的cc和h文件均生成到该文件夹下,生成一个静态库,需要使用的地方,链接该静态库即可。
工程目录如下
test_ws/
└── src
└── haha
├── CMakeLists.txt
├── package.xml
├── proto
│ ├── CMakeLists.txt
│ └── robot_app_protocol.proto
└── src
proto这个文件夹下的CMakeLists.txt内容如下
find_package(Protobuf REQUIRED)
message("come into sub --------------------------------------------------------------- ")
FILE(GLOB proto_files *.proto)
FOREACH(proto_file ${proto_files})
# STRING(REGEX REPLACE "[^/]proto" "" proto_file_name ${proto_file})
get_filename_component(proto_file_name ${proto_file} NAME_WE)
LIST(APPEND PROTO_SRCS "${proto_file_name}.pb.cc")
ADD_CUSTOM_COMMAND(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${proto_file_name}.pb.h" "${CMAKE_CURRENT_SOURCE_DIR}/${proto_file_name}.pb.cc"
COMMAND protoc --proto_path=${CMAKE_CURRENT_SOURCE_DIR}/
--cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/ ${proto_file}
DEPENDS ${proto_file}
)
ENDFOREACH(proto_file)
add_library(proto STATIC ${CMAKE_CURRENT_SOURCE_DIR}/${PROTO_SRCS})
target_link_libraries(proto ${PROTOBUF_LIBRARY})
参考资料
http://chen-tao.github.io/2015/11/07/cmakeprotoprotobuf-cpp/