我一直在尝试让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正确解释。
提前感谢您提供任何帮助。
答案 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
。