我在 Visual Studio 项目文件中添加了自定义构建步骤,从而生成 google protobuf .h / .cc文件.proto输入文件。但是我一直想知道只有原型文件的内容发生了变化才能开始编译?
有没有办法从自定义构建步骤告诉VisualStudio?将proto文件集成到visual studio构建解决方案中的最佳方法是什么?
目前,在每次构建时都会更新.proto文件,然后还会更新输出.h / .cc文件的时间戳...然后会重新编译依赖于此的所有内容。有没有更好的解决方法,同时仍然直接从视觉工作室构建它们?
答案 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”属性中的默认值。 (值得庆幸的是,这也消除了对两遍构建的需求,其中 是我以前忍受的另一个烦恼。)