14

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

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

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

4

2 回答 2

16

按照这些详细说明指定自定义构建工具

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

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

请注意项目元数据宏的用法,它替换了一些已弃用的宏(如 $(InputDir) 和 $(InputName))。

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

于 2012-10-23T12:50:31.163 回答
3

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

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

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

和(也许?)kmote00:

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

于 2012-07-13T11:07:19.317 回答