Sco*_*mac 9 c++ python cmake protocol-buffers
我是一个项目的一部分,该项目使用protobufs在基于Python的客户端和基于c ++的服务器之间进行通信.我们也在使用CMake.
使用CMake,我正在寻找一种protoc仅在*.proto文件更改时有条件地调用程序的方法.我当前的目录结构(这似乎是问题的一部分)有一个*.proto文件目录,以及生成*.pb.{h|cc}和*_pb2.py文件的单独目录:
build/
Messages/proto/ <--- .proto files are here
Messages/cpp/ <--- would like the auto generated c++ files here
Messages/py/ <--- would like the auto generated Python files here
Server/Main.cpp
Client/Main.py
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
(root)CMakeLists.txt文件(下面)在执行命令protoc时运行程序build/cmake ..:
project(AAA)
MESSAGE("Protobuf autogeneration STARTED")
file(GLOB proto_packages "${AAA_SOURCE_DIR}/Messages/proto/*.proto")
execute_process(COMMAND protoc -I=${AAA_SOURCE_DIR}/Messages/proto --cpp_out=${AAA_SOURCE_DIR}/Messages/cpp/ --python_out=${AAA_SOURCE_DIR}/Messages/py/ ${proto_packages})
MESSAGE("Protobuf autogeneration COMPLETED")
cmake_minimum_required(VERSION 2.8)
find_package(Boost)
find_package(Protobuf REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${PROTOBUF_INCLUDE_DIR})
add_subdirectory(Messages/proto)
add_subdirectory(Messages/cpp)
add_subdirectory(Server)
Run Code Online (Sandbox Code Playgroud)
该Messages/proto/CMakeLists.txt文件(我不确定是否有任何影响):
file(GLOB proto_packages "${AAA_SOURCE_DIR}/Messages/proto/*.proto")
execute_process(COMMAND protoc -I=${AAA_SOURCE_DIR}/Messages/proto --cpp_out=../cpp --python_out=../py ${proto_packages}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)
理想情况下,protoc程序应作为build/make命令的一部分运行,并且仅在文件更改时(重新)生成*.pb.{h|cc}和*_pb2.py文件*.proto.
目录中的某些文件Server/具有#include <Messages/cpp/Xxxx.pb.h>指令.
对于奖励积分,我更愿意将*.pb.{h|cc}和*_pb2.py文件生成到各自的目录中(Messages/cpp/并Messages/py/分别).但是,如果有人能够帮助解决问题的依赖部分,我很高兴让*.pb.{h|cc}和*_pb2.py文件共存*.proto.
在此先感谢您的任何建议 !
这是未经测试的,但您需要添加自定义命令作为自定义目标.
您需要为输出行创建一些变量,但不知道如何将*.proto转换为*.pb.{h | cc}和*_pb2.py文件我无法帮助.请参阅proto_packages_cpp和proto_packages_python变量以了解这些变量的位置.
file(GLOB proto_packages "${AAA_SOURCE_DIR}/Messages/proto/*.proto")
add_custom_command(
COMMAND protoc -I=${AAA_SOURCE_DIR}/Messages/proto --cpp_out=../cpp --python_out=../py ${proto_packages}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${proto_packages}
OUTPUT ${proto_packages_cpp} ${proto_packages_python}
)
add_custom_target(protobuf_autogeneration_target ALL
DEPENDS ${proto_packages}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4529 次 |
| 最近记录: |