Как наладить cmake, чтоб он автоматически генерил c++ файлы из grpc proto файлов?
У меня есть cmake, который автоматически генерит прото файлы в с++ файлы. Но что мне нужно добавить в этот файл, чтоб файлы, использующие grpc тоже генерились ?
cmake_minimum_required(VERSION 3.17)
set(CMAKE_CXX_STANDARD 17)
project(protobuf_test4)
find_package(Protobuf REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS person.proto)
add_executable(protobuf_test4 main.cpp ${PROTO_SRCS} ${PROTO_HDRS})
target_link_libraries(protobuf_test4 ${Protobuf_LIBRARIES})
*дополнение
Попробовал следующий способ
cmake_minimum_required(VERSION 3.17)
project(gRPC_test)
set(CMAKE_CXX_STANDARD 20)
find_package(Protobuf REQUIRED)
find_package(gRPC CONFIG REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(FILES
test.pb.h
test.pb.cc
test.grpc.pb.h
test.grpc.pb.cc
)
add_custom_command(
OUTPUT ${FILES}
COMMAND protobuf::protoc
ARGS "--proto_path=${CMAKE_CURRENT_SOURCE_DIR}"
"--cpp_out=${CMAKE_BINARY_DIR}"
${CMAKE_CURRENT_SOURCE_DIR}/test.proto
COMMAND protobuf::protoc
ARGS "--proto_path=${CMAKE_CURRENT_SOURCE_DIR}"
"--grpc_out=${CMAKE_BINARY_DIR}"
"--plugin=protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin>"
${CMAKE_CURRENT_SOURCE_DIR}/test.proto
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test.proto
)
add_executable(gRPC_test main.cpp test.pb.cc test.grpc.pb.cc test.grpc.pb.h test.pb.h)
target_link_libraries(gRPC_test ${Protobuf_LIBRARIES} gRPC::grpc++)
Но теперь компилятор видит ошибки в скомпилированном файле. Ошибки от того что не найдены функции. Похоже какая то библиотека не подтянулась. В чем может быть дело?
error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::ClearToEmpty()’
Ответы (1 шт):
Автор решения: Rikitikitavi
→ Ссылка
Можно примерно так сделать:
set(FILES
Service.pb.h
Service.pb.cc
Service.grpc.pb.h
Service.grpc.pb.cc
)
add_custom_command(
OUTPUT ${FILES}
COMMAND protobuf::protoc
ARGS "--proto_path=${CMAKE_CURRENT_SOURCE_DIR}"
"--cpp_out=${CMAKE_BINARY_DIR}"
${CMAKE_CURRENT_SOURCE_DIR}/ProtoFile.proto
COMMAND protobuf::protoc
ARGS "--proto_path=${CMAKE_CURRENT_SOURCE_DIR}"
"--grpc_out=${CMAKE_BINARY_DIR}"
"--plugin=protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin>"
${CMAKE_CURRENT_SOURCE_DIR}/ProtoFile.proto
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ProtoFile.proto
)