使用预建步骤时,protoc.exe会导致重新编译整个解决方案

时间:2016-09-27 17:57:16

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

我有一个非常大的解决方案,有几个项目和许多源文件和模式。

其中一个项目有一个prebuild步骤,用于在schemas目录上执行protoc.exe,该目录创建许多源文件,这些源文件作为项目的一部分进行编译。

问题是protoc.exe会覆盖未更改的文件,这会导致许多文件和依赖于它们的文件被重新编译,并且每次编译任何内容时,几乎整个解决方案都会被重新编译。

有没有更好的方法来使用protoc.exe来防止出现此问题?

我认为问题的根源是protoc.exe会覆盖完全相同的文件。

我在Visual Studio 2015上使用C ++

2 个答案:

答案 0 :(得分:0)

在proc.exe周围创建一个包装器,在运行它之后,重置没有更改的文件的修改时间。

答案 1 :(得分:0)

听起来你正在以这样的方式调用protoc,告诉它为每个.proto文件重新生成代码,当你实际上可以告诉它只为特定文件生成代码时。

例如,假设我们有两个文件test1.prototest2.proto,它们之间存在依赖关系:

// test1.proto
syntax = "proto2";
import "test2.proto";
message Foo {
  optional Bar bar = 1;
}

// test2.proto
syntax = "proto2";
message Bar {
  optional int32 count = 1;
}

如果test1.proto发生了变化,我们可以告诉protoc重建该文件的代码,而不是test2.proto

protoc --cpp_out=. test1.proto

这会生成test1.pb.htest1.pb.cc,但不会生成test2.pb.htest2.pb.cc。只需确保protoc可以找到所需的任何导入 - 为此您可能需要传递-Ipath/to/other/protos