无法使用google协议缓冲区将.proto文件构建到.pb.cc文件中

时间:2013-05-02 15:57:03

标签: protocol-buffers automake

我一直在尝试让automake自动确定如何从谷歌协议缓冲区.proto描述构建.pb.cc和.pb.hh文件,但没有运气。

我尝试在SO上使用this post,但它仍无效。

以下是我的Makefile.am的摘录:

PROTOC=@ac_protoc_cmd@
%.pb.h %.pb.cc: %.proto
    $(PROTOC) --proto_dir=$(srcdir)/proto --cpp_out=$(srcdir) $(srcdir)/proto/$<

libtass_a_SOURCES = \
    $(srcdir)/tass.pb.cc

nobase_include_HEADERS = \
    $(srcdir)/tass.pb.h

尝试运行make时,我得到:

> Making all in src 
> make[1]: Entering directory `/project/tass/src'
> make[1]: *** No rule to make target `tass.pb.cc', needed by `tass.pb.o'. Stop.  
> make[1]: Leaving directory `/project/tass/src'
> make: *** [all-recursive] Error 1

ac_proto_cmd在检查GPB依赖关系时由configure.ac填充protoc二进制文件的路径。我已经验证了它的格式为“/ opt / common / protobuf / -VERSION- / bin / protoc”,这是我保留GPB库的地方。

我正在尝试将我的.proto文件保存在src / proto中,并让protoc将已编译的cc和h文件吐出到src中。但是,即使将.proto文件移动到src /也不起作用,所以我认为这不是问题所在。据我所知,make甚至没有尝试调用protoc,因此我不确定该规则是否正在被make正确解释。

提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

这里的问题是构建依赖关系,因为automake发现依赖关系是编译的副作用(请参阅http://www.gnu.org/software/automake/manual/html_node/Sources.html以解释变通方法)所以你必须添加这一行:

BUILT_SOURCES = $(srcdir)/tass.pb.cc

答案 1 :(得分:0)

没有名为--proto_dir的protoc参数。我希望你的意思是--proto_path