将Google Protocol Buffers .proto文件集成到Visual C ++ 2010中

时间:2012-07-12 08:35:37

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

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

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

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

2 个答案:

答案 0 :(得分:15)

请按照这些详细说明指定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 macro s,它取代了一些已弃用的宏(例如$(InputDir)和$(InputName))。

现在,仅当输入文件(即%(FullPath))比“输出”更新时,协议缓冲区编译器才会运行。

答案 1 :(得分:3)

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

  

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

     

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

和(也许?)kmote00:

  

...   底线:我必须确切地确保我的“输出”条目   匹配(用户定义的)“OutputFile”属性中的默认值。   (值得庆幸的是,这也消除了对两遍构建的需求,其中   是我以前忍受的另一个烦恼。)