如何使用 cmake 运行 grpc python 文件的协议?
How to run protoc for grpc python files using cmake?
我有一个文件 my.proto
,我想使用 cmake 创建相应的 my_pb2.py
和 my_pb2_grpc.py
文件。 (不幸的是,我不能使用其他构建系统)
通常,我使用 grpcio-tools python 模块中的 protoc 来这样做:
python3 -m grpc_tools.protoc -I. --grpc_python_out=. --python_out=. my.proto
cmake 为 python protobuf 提供了 some support,但对于我的用例来说实现它还不清楚。
我的问题是:
- 如何在 cmake 中调用类似的命令
- 如何将生成的文件放在特定的目的地
- 在运行 cmake (grpcio-tools/protobuf)之前需要哪些依赖?
根据@Tsyvarev 评论并进一步阅读 cmake 文档,我得到了以下 CMakeLists.txt
内容(位于 my.proto
目录中)
# files generated by protoc
set ( PROTO_PY ${CMAKE_CURRENT_LIST_DIR}/my_pb2.py ${CMAKE_CURRENT_LIST_DIR}/my_pb2_grpc.py )
# compile dpe.proto
add_custom_command (
OUTPUT ${PROTO_PY}
COMMAND python3 -m grpc_tools.protoc -I${CMAKE_CURRENT_LIST_DIR} --grpc_python_out=${CMAKE_CURRENT_LIST_DIR} --python_out=${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/my.proto
)
# invoke custom command
add_custom_target ( proto_py ALL
DEPENDS ${PROTO_PY} )
install( PROGRAMS ${PROTO_PY} COMPONENT mycomponent DESTINATION mypath )
我有一个文件 my.proto
,我想使用 cmake 创建相应的 my_pb2.py
和 my_pb2_grpc.py
文件。 (不幸的是,我不能使用其他构建系统)
通常,我使用 grpcio-tools python 模块中的 protoc 来这样做:
python3 -m grpc_tools.protoc -I. --grpc_python_out=. --python_out=. my.proto
cmake 为 python protobuf 提供了 some support,但对于我的用例来说实现它还不清楚。
我的问题是:
- 如何在 cmake 中调用类似的命令
- 如何将生成的文件放在特定的目的地
- 在运行 cmake (grpcio-tools/protobuf)之前需要哪些依赖?
根据@Tsyvarev 评论并进一步阅读 cmake 文档,我得到了以下 CMakeLists.txt
内容(位于 my.proto
目录中)
# files generated by protoc
set ( PROTO_PY ${CMAKE_CURRENT_LIST_DIR}/my_pb2.py ${CMAKE_CURRENT_LIST_DIR}/my_pb2_grpc.py )
# compile dpe.proto
add_custom_command (
OUTPUT ${PROTO_PY}
COMMAND python3 -m grpc_tools.protoc -I${CMAKE_CURRENT_LIST_DIR} --grpc_python_out=${CMAKE_CURRENT_LIST_DIR} --python_out=${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/my.proto
)
# invoke custom command
add_custom_target ( proto_py ALL
DEPENDS ${PROTO_PY} )
install( PROGRAMS ${PROTO_PY} COMPONENT mycomponent DESTINATION mypath )