【问题标题】:Unable to get automake to build .proto files into .pb.cc files with google protocol buffers无法让 automake 使用谷歌协议缓冲区将 .proto 文件构建到 .pb.cc 文件中
【发布时间】:2013-04-26 21:23:12
【问题描述】:

我一直在尝试让 automake 自动确定如何从 google 协议缓冲区 .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 是否正确解释了该规则。

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

【问题讨论】:

    标签: protocol-buffers automake


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        • 2023-03-13
        • 2018-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        相关资源
        最近更新 更多