接下来,定义相关的目录地址,PROTO_META_BASE_DIR为编译之后生成文件的目录。PROTO_FLAGS很重要,指定编译.proto文件时的总的寻找路径,.proto中的import命令根据根据这个地址去连接其他的.proto文件:
SET(PROTO_META_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}) LIST(APPEND PROTO_FLAGS -I${CMAKE_CURRENT_SOURCE_DIR})设置好之后,通过FOREACH去循环之前的.proto文件,依次编译每个文件,然后将生成的.pb.cc和.pb.h移动回原始的目录,至此就可以正常工作了。
FOREACH(FIL ${protobuf_files}) GET_FILENAME_COMPONENT(FIL_WE ${FIL} NAME_WE) string(REGEX REPLACE ".+/(.+)\\..*" "\\1" FILE_NAME ${FIL}) string(REGEX REPLACE "(.+)\\${FILE_NAME}.*" "\\1" FILE_PATH ${FIL}) string(REGEX MATCH "(/mediapipe/framework.*|/mediapipe/util.*|/mediapipe/calculators/internal/)" OUT_PATH ${FILE_PATH}) set(PROTO_SRCS "${CMAKE_CURRENT_BINARY_DIR}${OUT_PATH}${FIL_WE}.pb.cc") set(PROTO_HDRS "${CMAKE_CURRENT_BINARY_DIR}${OUT_PATH}${FIL_WE}.pb.h") EXECUTE_PROCESS( COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ${PROTO_FLAGS} --cpp_out=${PROTO_META_BASE_DIR} ${FIL} ) message("Copying " ${PROTO_SRCS} " to " ${FILE_PATH}) file(COPY ${PROTO_SRCS} DESTINATION ${FILE_PATH}) file(COPY ${PROTO_HDRS} DESTINATION ${FILE_PATH}) ENDFOREACH() 参考链接
https://www.v2ex.com/t/602363
如果你与我志同道合于此,老潘很愿意与你交流;
如果你喜欢老潘的内容,欢迎关注和支持。
如果你喜欢我的文章,希望点赞