0

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

我试过在 SO 上使用这篇文章,但它仍然不起作用。

这是我的 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 是否正确解释了该规则。

提前感谢您对此的任何帮助。

4

2 回答 2

1

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

BUILT_SOURCES = $(srcdir)/tass.pb.cc
于 2014-03-04T16:57:23.530 回答
1

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

于 2013-05-03T00:32:45.663 回答