我有一个非常大的解决方案,有几个项目和许多源文件和模式。
其中一个项目有一个prebuild步骤,用于在schemas目录上执行protoc.exe,该目录创建许多源文件,这些源文件作为项目的一部分进行编译。
问题是protoc.exe会覆盖未更改的文件,这会导致许多文件和依赖于它们的文件被重新编译,并且每次编译任何内容时,几乎整个解决方案都会被重新编译。
有没有更好的方法来使用protoc.exe来防止出现此问题?
我认为问题的根源是protoc.exe会覆盖完全相同的文件。
我在Visual Studio 2015上使用C ++
答案 0 :(得分:0)
在proc.exe周围创建一个包装器,在运行它之后,重置没有更改的文件的修改时间。
答案 1 :(得分:0)
听起来你正在以这样的方式调用protoc
,告诉它为每个.proto
文件重新生成代码,当你实际上可以告诉它只为特定文件生成代码时。
例如,假设我们有两个文件test1.proto
和test2.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.h
和test1.pb.cc
,但不会生成test2.pb.h
或test2.pb.cc
。只需确保protoc
可以找到所需的任何导入 - 为此您可能需要传递-Ipath/to/other/protos
。