# Minimum CMake required cmake_minimum_required(VERSION 2.8) # Project project(HelloWorld CXX) # Protobuf set(protobuf_MODULE_COMPATIBLE TRUE) find_package(protobuf CONFIG REQUIRED) message(STATUS "Using protobuf ${protobuf_VERSION}") # gRPC find_package(gRPC CONFIG REQUIRED) message(STATUS "Using gRPC ${gRPC_VERSION}") # gRPC C++ plugin get_target_property(gRPC_CPP_PLUGIN_EXECUTABLE gRPC::grpc_cpp_plugin IMPORTED_LOCATION_RELEASE) # Proto file get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE) get_filename_component(hw_proto_path "${hw_proto}" PATH) # Generated sources protobuf_generate_cpp(hw_proto_srcs hw_proto_hdrs "${hw_proto}") set(hw_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.cc") set(hw_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.h") add_custom_command( OUTPUT "${hw_grpc_srcs}" "${hw_grpc_hdrs}" COMMAND protobuf::protoc ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}" -I "${hw_proto_path}" --plugin=protoc-gen-grpc="${gRPC_CPP_PLUGIN_EXECUTABLE}" "${hw_proto}" DEPENDS "${hw_proto}") # Generated include directory include_directories("${CMAKE_CURRENT_BINARY_DIR}") # Targets greeter_[async_](client|server) foreach(_target greeter_client greeter_server greeter_async_client greeter_async_server) add_executable(${_target} "${_target}.cc" ${hw_proto_srcs} ${hw_grpc_srcs}) target_link_libraries(${_target} protobuf::libprotobuf gRPC::grpc++_unsecure) endforeach()