如何使用vcpkg工具链删除CMake中--plugin=protoc-gen-grpc的硬编码路径



我有一个使用CMake在C++中构建grpc库的工作示例。但是,我需要对标志的绝对路径进行硬编码--plugin=protoc-gen-grpc="/home/myusername/dev/lab/MiniGL/vcpkg/installed/x64-linux/tools/grpc/grpc_cpp_plugin"

我真正想做的是为grpc_cpp_plugin找到下面的环境变量${PROTOBUF_PROTOC_EXECUTABLE},这是必需的,但我就是找不到。即${GPRC_CPP_PLUGIN_EXECUTABLE}

有人知道我是否遗漏了一些简单的东西吗?

这是我的CMakeLists.txt 的全部列表

project(hello_contract_library)
set(CMAKE_VERBOSE_MAKEFILE ON)
find_package(protobuf CONFIG REQUIRED)
#target_link_libraries(main PRIVATE protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite)
set(GENERATED_DIR "${PROJECT_SOURCE_DIR}/generated")
file(MAKE_DIRECTORY "${GENERATED_DIR}")
set(hello_src "${GENERATED_DIR}/hello.pb.cc")
set(hello_hdr "${GENERATED_DIR}/hello.pb.h")
set(hello_grpc_src  "${GENERATED_DIR}/hello.grpc.pb.cc")
set(hello_grpc_hdr  "${GENERATED_DIR}/hello.grpc.pb.h")
# Added to include generated header files
include_directories("${GENERATED_DIR}")
add_custom_command(
OUTPUT "${hello_src}" "${hello_hdr}" "${hello_grpc_src}" "${hello_grpc_hdr}"
COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
ARGS --grpc_out "${PROJECT_SOURCE_DIR}/generated"
--cpp_out "${PROJECT_SOURCE_DIR}/generated"
-I "/home/myusername/dev/lab/MiniGL/src/backend/public/contracts"
--plugin=protoc-gen-grpc="/home/myusername/dev/lab/MiniGL/vcpkg/installed/x64-linux/tools/grpc/grpc_cpp_plugin"
"hello.proto"
DEPENDS "hello.proto")
add_library(${PROJECT_NAME}
${hello_src}
${hello_hdr}
${hello_grpc_src}
${hello_grpc_hdr})

目前唯一的方法是创建自己的.cmake文件,该文件查找这些可执行文件并定义这些变量。幸运的是,谷歌有一个例子。您可以将common.cmake复制到将包含在项目中的cmake目录中。

这将为您的--plugin提供${_GRPC_CPP_PLUGIN_EXECUTABLE},并将${_GRPC_GRPCPP}放入target_link_libraries中。

示例

在根目录中

# common project setup
include(cmake/common.cmake) # comes from Google examples
add_subdirectory(proto)

在proto目录中

# Proto files
set(my_protos
test.proto
)
# Generated sources
set(my_protos_srcs
${CMAKE_BINARY_DIR}/proto/test.pb.cc
)
set(my_protos_hdrs
${CMAKE_BINARY_DIR}/proto/test.pb.h
)
add_custom_command(
OUTPUT ${my_protos_srcs} ${my_protos_hdrs}
COMMAND ${_PROTOBUF_PROTOC}
ARGS --cpp_out ${CMAKE_BINARY_DIR}/proto
--grpc_out ${CMAKE_BINARY_DIR}/proto
-I ${CMAKE_SOURCE_DIR}/proto
--plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}"
${my_protos} 
DEPENDS ${my_protos}
)
add_library(protos
${my_protos_srcs}
${my_protos_hdrs}
)
target_link_libraries(protos
${_PROTOBUF_LIBPROTOBUF}
${_GRPC_GRPCPP}
)

最新更新