【问题标题】:Integrate Google Protocol Buffers .proto files to Visual C++ 2010将 Google Protocol Buffers .proto 文件集成到 Visual C++ 2010
【发布时间】:2012-07-11 23:22:33
【问题描述】:

我已将自定义构建步骤添加到我的 Visual Studio 项目文件中,该文件会生成 google protobuf .h/.cc 文件.proto 输入文件。但是我一直想知道是否只有在 proto 文件的内容发生更改时才可以开始编译?

有没有办法从自定义构建步骤中准确地告诉 VisualStudio?将 proto 文件集成到 Visual Studio 构建解决方案中的最佳方式是什么?

目前,在每次构建时,都会更新 .proto 文件,然后更新输出 .h/.cc 文件的时间戳……然后重新编译依赖于此的所有内容。有没有更好的解决方法,同时仍然直接从 Visual Studio 构建它们?

【问题讨论】:

  • 您的问题解决了吗?在没有任何讨论的情况下提出问题并为问题投票有点奇怪。

标签: c++ visual-studio-2010 visual-c++ protocol-buffers


【解决方案1】:

按照这些详细说明指定Custom Build Tool

考虑到您的 proto 文件与标准项目配置中的 .h/.cpp 文件一起驻留,以下是要插入到自定义构建工具中的值:

Command Line: 
path\to\protoc --proto_path=$(ProjectDir) --cpp_out=$(ProjectDir) %(FullPath)
Outputs: 
$(ProjectDir)%(Filename).pb.h;$(ProjectDir)%(Filename).pb.cc

请注意item metadata macros 的用法,它替换了一些已弃用的宏(如$(InputDir) 和$(InputName))。

现在仅当输入文件(即 %(FullPath))比“输出”更新时才会运行 Protocol Buffers 编译器。

【讨论】:

  • 我的 protoc.exe 不喜欢 '\' 所以我不得不 cd 到 .proto 文件的目录并使用 --cpp_out=./ %(FileName)%(Extension)
【解决方案2】:

也许this 有帮助。特别看一下 Igor Zavoychinskiy 的帖子:

这个讨厌的问题的解决方案其实很简单:在输出部分 您应该指定完整路径。这在任何地方都没有明确说明 但是没有这个检查器就无法找到文件,因此, 假设它们不存在。例如对于 protobuffers 编译 输出部分将是这样的:

$(InputDir)\$(InputName).pb.cc;$(InputDir)\$(InputName).pb.h

和(也许?)kmote00:

... 底线:我只需要确保我的“输出”条目准确无误 匹配(用户定义的)“OutputFile”属性中的默认值。 (谢天谢地,这也避免了两次构建的需要,这 是我之前忍受的另一个烦恼。)

【讨论】:

  • 这确实有帮助!谢谢@Jakob S。我在输出部分使用了相对路径..由于某种原因 $(InputDir)\$(InputName) 没有定义...但除此之外。它适用于绝对路径!
  • 好吧...不知道我有这个选项。找到了。完毕! :) 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多