cmake_minimum_required(VERSION3.5)project(common_pb)find_package(Protobuf REQUIRED)#设置输出路径SET(PROTO_DIR${CMAKE_SOURCE_DIR}/originFile/)SET(PB_DIR${CMAKE_SOURCE_DIR}/pbCCFile)message("[PROTO_DIR]"${PROTO_DIR})#设置protoc的搜索路径LIST(APPEND PROTO_FLAGS -I${PROTO_DIR})#获取需要编译...
一般来说,protobuf经常搭配Cmake使用,Cmake有官方的modules,可以通过简单的几个命令protobuf_generate_cpp来生成对应的.pb.cc和.pb.h。 简单的例子: 代码语言:javascript 复制 find_package(ProtobufREQUIRED)include_directories(${Protobuf_INCLUDE_DIRS})include_directories(${CMAKE_CURRENT_BINARY_DIR})protobuf_...
protobuf protobuf 是谷歌发布的一种数据封装协议, 用于数据传输。在使用时需要定义好 proto 文件, 然后用 protoc 工具编译为 pb.h 和 pb.cc 文件。打开命令行输入如下命令 protoc -I=${proto_file_dir} --cpp_out=${pb_file_dir} *.proto 这里面有三个参数, -I 表示 proto 文件的路径; --cpp_out...
每个.proto文件都import了其他目录下的文件,这里的import类似于C++中的include,但是这里的import又可以相互引用,例如上述的status_handler.proto也引用了mediapipe_options.proto。 如果直接对上述所有的.proto文件直接使用protobuf_generate_cpp命令,会直接报错,因为这些文件不在一个目录,而且import的相对目录也无法分析。另...
find_package(Protobuf REQUIRED) # check if protobuf was found if(PROTOBUF_FOUND) message ("protobuf found") else() message (FATAL_ERROR "Cannot find Protobuf") endif() # Generate the .h and .cxx files PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS AddressBook.proto) ...
# find the protobuf compiler and libraries find_package(Protobuf REQUIRED) # check if protobuf was found if(PROTOBUF_FOUND) message ("protobuf found") else() message (FATAL_ERROR "Cannot find Protobuf") endif() # Generate the .h and .cxx files PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO...
add_custom_command在编译时被触发(对于我的项目)。
bar.proto的文件如下: import "common/foo/foo.proto"; message bar_msg { optional foo_msg foo = 1; optional string name = 2; } 1. 2. 3. 4. 5. 6. 7. 如上,bar文件引用foo,而且这两个不在一个目录,如果直接使用protobuf_generate_cpp来生成,直接会报错。(这个例子取自Yu的一篇博文) ...
cmake有官方的modules,文件是FindProtobuf.cmake,里面有宏PROTOBUF_GENERATE_CPP.用法据介绍如下: 1 2 3 4 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS foo.proto) ADD_EXECUTABLE(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS}) TARGET_LINK_LIBRARIES(bar ...
要求protobuf_generate_cpp命令和生成add_executable() 或 add_library() 的命令必须在同一个CMakeList中 该方法(当前3.18)仍无法设置源码的生成路径,只能默认在相应的build-tree中生成 CMake funciton使用 ├─hello_world_protobuf │ ├─protobuf_rec │ │ CMakeLists.txt │ │ main.cpp │ ││ └─...