Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用CMake编译.proto文件以生成.grpc.pb.cc和.grpc.pb.h文件? 我试图用C++中的GRPC创建服务器和客户端设置。在CMake中生成.grpc.pb.h和.grpc.pb.cc文件时,我遇到了一些问题。以下是我的项目设置 gRPCStarter |__build |__proto | |__ file.proto | |__ CMakeLists.txt |__main.cpp |__CMakeLists.txt_C++_Cmake_Compilation_Protocol Buffers_Grpc - Fatal编程技术网

如何使用CMake编译.proto文件以生成.grpc.pb.cc和.grpc.pb.h文件? 我试图用C++中的GRPC创建服务器和客户端设置。在CMake中生成.grpc.pb.h和.grpc.pb.cc文件时,我遇到了一些问题。以下是我的项目设置 gRPCStarter |__build |__proto | |__ file.proto | |__ CMakeLists.txt |__main.cpp |__CMakeLists.txt

如何使用CMake编译.proto文件以生成.grpc.pb.cc和.grpc.pb.h文件? 我试图用C++中的GRPC创建服务器和客户端设置。在CMake中生成.grpc.pb.h和.grpc.pb.cc文件时,我遇到了一些问题。以下是我的项目设置 gRPCStarter |__build |__proto | |__ file.proto | |__ CMakeLists.txt |__main.cpp |__CMakeLists.txt,c++,cmake,compilation,protocol-buffers,grpc,C++,Cmake,Compilation,Protocol Buffers,Grpc,以下是我当前的CMakeLists.txt文件 在proto目录中: INCLUDE(FindProtobuf) FIND_PACKAGE(Protobuf REQUIRED) INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR}) PROTOBUF_GENERATE_CPP(PROTO_SRC PROTO_HEADER file.proto) ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC}) 在源目录内(如下所示

以下是我当前的CMakeLists.txt文件

proto
目录中:

INCLUDE(FindProtobuf)
FIND_PACKAGE(Protobuf REQUIRED)
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
PROTOBUF_GENERATE_CPP(PROTO_SRC PROTO_HEADER file.proto)
ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC})
目录内(如下所示):

执行以下操作时,我不会得到任何
.gpc.pb.h
.grpc.pb.cc
文件:

cd build
cmake .. && make -j4

这是我的

我通过以下方式解决了此问题。

我通过以下方式解决了此问题。

在运行make期间,您是否收到任何错误?在此运行期间,应生成
PROTO_SRC
PROTO_HEADER
变量中列出的文件。这些变量的内容是什么?(您可以通过
message()
命令打印变量的内容)。在<代码> > <代码>中是否曾经打印过“运行GRPC C++协议缓冲编译器”?如果打印,则实际运行
proto
。使用
make VERBOSE=1
可以看到在构建过程中执行的确切命令行。您的CMake项目是否找到Protobuf?您还可以提供CMake输出日志吗?另外,您好像调用了两次
PROTOBUF\u GENERATE\u GRPC\u CPP
?一次是在原始CMake文件中,一次是在顶级CMake文件中,这是为什么?@Tsyvarev我刚刚验证过。“<代码> >”运行GRPC C++协议缓冲编译器“<代码> >在<代码>之前不被打印。制作< /COD> >我尝试打印自定义消息,看看在制作过程中是否调用了代码>原BufffGyEngEyGRPCOPCPP 。以下代码行在
make
期间不打印任何内容:
函数(PROTOBUF\u GENERATE\u GRPC\u CPP SRCS HDRS)消息(“命令执行已启动”)
看起来此函数从未被调用。因此,无法生成grpc文件。您可以调用
PROTOBUF\u GENERATE\u grpc\u CPP
,但从不使用其结果(在
ProtoGRPCSources
ProtoGRPCHeaders
变量中列出的文件)。由于未使用这些文件,CMake不会生成它们。(与创建
PROTO\u SRC
PROTO\u HEADER
变量中列出的文件的
PROTOBUF\u GENERATE\u CPP
调用相比较。您在
add\u executable
调用中使用这些文件,因此它们是在生成可执行文件之前生成的)。在
make
运行期间是否出现错误?在此运行期间,应生成
PROTO_SRC
PROTO_HEADER
变量中列出的文件。这些变量的内容是什么?(您可以通过
message()
命令打印变量的内容)。在<代码> > <代码>中是否曾经打印过“运行GRPC C++协议缓冲编译器”?如果打印,则实际运行
proto
。使用
make VERBOSE=1
可以看到在构建过程中执行的确切命令行。您的CMake项目是否找到Protobuf?您还可以提供CMake输出日志吗?另外,您好像调用了两次
PROTOBUF\u GENERATE\u GRPC\u CPP
?一次是在原始CMake文件中,一次是在顶级CMake文件中,这是为什么?@Tsyvarev我刚刚验证过。“<代码> >”运行GRPC C++协议缓冲编译器“<代码> >在<代码>之前不被打印。制作< /COD> >我尝试打印自定义消息,看看在制作过程中是否调用了代码>原BufffGyEngEyGRPCOPCPP 。以下代码行在
make
期间不打印任何内容:
函数(PROTOBUF\u GENERATE\u GRPC\u CPP SRCS HDRS)消息(“命令执行已启动”)
看起来此函数从未被调用。因此,无法生成grpc文件。您可以调用
PROTOBUF\u GENERATE\u grpc\u CPP
,但从不使用其结果(在
ProtoGRPCSources
ProtoGRPCHeaders
变量中列出的文件)。由于未使用这些文件,CMake不会生成它们。(与创建
PROTO\u SRC
PROTO\u HEADER
变量中列出的文件的
PROTOBUF\u GENERATE\u CPP
调用相比较。您可以在
add\u executable
调用中使用这些文件,因此它们是在构建可执行文件之前生成的)。
cd build
cmake .. && make -j4