cmake_minimum_required(VERSION 3.10) project(SimpleRPCExample CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # include source includes include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) # find python interpreter find_package(Python3 COMPONENTS Interpreter REQUIRED) set(GENERATED_DIR ${CMAKE_BINARY_DIR}/generated) file(MAKE_DIRECTORY ${GENERATED_DIR}) set(RPC_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/tools/generate_rpc.py) set(RPC_TEMPLATES ${CMAKE_CURRENT_SOURCE_DIR}/tools/templates) # inputs to parse set(RPC_INPUTS ${CMAKE_CURRENT_SOURCE_DIR}/src/MyService.h ) # command to run generator add_custom_command( OUTPUT ${GENERATED_DIR}/MyService.proxy.h ${GENERATED_DIR}/MyService.proxy.cpp ${GENERATED_DIR}/MyService.skeleton.h ${GENERATED_DIR}/MyService.skeleton.cpp COMMAND ${CMAKE_COMMAND} -E echo "Generating RPC stubs..." COMMAND ${Python3_EXECUTABLE} ${RPC_GENERATOR} --out-dir ${GENERATED_DIR} --compile-commands ${CMAKE_BINARY_DIR}/compile_commands.json --templates ${RPC_TEMPLATES} ${RPC_INPUTS} DEPENDS ${RPC_GENERATOR} ${RPC_TEMPLATES} ${RPC_INPUTS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Running RPC code generator" VERBATIM ) include_directories(${GENERATED_DIR}) add_custom_target(rpc_generated DEPENDS ${GENERATED_DIR}/MyService.proxy.h ${GENERATED_DIR}/MyService.proxy.cpp ${GENERATED_DIR}/MyService.skeleton.h ${GENERATED_DIR}/MyService.skeleton.cpp ) # Server add_executable(server src/server.cpp src/MyService.cpp ${GENERATED_DIR}/MyService.skeleton.cpp ) add_dependencies(server rpc_generated) # Client add_executable(client src/client.cpp ${GENERATED_DIR}/MyService.proxy.cpp ) add_dependencies(client rpc_generated)