c++ - 如何在编译过程中自动在 Visual Studio 中生成相应的 protobuf 文件?
问题描述
我在一个文件夹中有几条 protobuf 消息,我想将它们自动转换为相应的 header/cc 文件,然后在 Visual Studio 中继续编译过程。
到目前为止,我能想到的最佳解决方案是通过定义Pre-Build
事件Propertise>Build Events>Pre-Build Event
并将以下内容指定为命令:
$(SolutionDir)Dependencies\include\protobuf\bin\protoc.exe --proto_path=$(SolutionDir)Dependencies\include\messages\ --cpp_out=$(SolutionDir)Dependencies\include\messages\ message.proto message2.proto message3.proto
目前有关于此解决方案的 2 个问题:
我必须自己手动添加每个文件名。VS2019如何自动选择文件名?我尝试
%filename%
了宏,但无济于事,因为它似乎只返回项目文件名。我还发现,每次更改消息时都不会生成这些文件。即使清理项目,也不会删除它们,所以我必须手动删除生成的文件并再次尝试重建项目!
除了求助于可以作为预构建事件调用的批处理文件之外,我怎样才能在 Visual Studio 中实现这一点而不这样做呢?
解决方案
我建议你可以参考以下步骤:
1、修改.proto文件的属性:Item Type:Custom Build Tool
2、配置项目属性:Properties -> Custom Build Tools -> General
命令行:$(SolutionDir)Dependencies\include\protobuf\bin\protoc.exe --proto_path= .\proto %(Filename).proto --cpp_out=$(ProjectDir)protocpp
说明:protoc %(Filename).proto
输出:$(ProjectDir)protocpp%(Filename).pb.cc
将输出添加到项目类型:c/c++ complier
然后你可以尝试构建 .proto 文件。
注意:新添加的.proto文件也需要选择操作Custom Build Tool
推荐阅读
- encryption - 多次注册AeadConfig后解密失败?
- javascript - Having trouble finding/or implementing the correct mongoDb method to find and update subdocument
- django - Django 2.1.7: Makemigrations command result: "No change detected in app"
- yii - Yii Cache, CDbCommand::execute() fail: SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: YiiCache.id
- maven - ANT Vs MAVEN comparison with respect to Build time
- scenekit - Converting an MLMultiArray (output shape) to SCNGeometry
- ruby - 如何滚动到 Ruby 和 Selenium 中的元素
- node.js - 使用 sinon 模拟 serverless-mysql
- json - 将 JSON POST 数据传递给 Ignite 2.7 ComputeTask
- angular - selectionStart and selectionEnd return nulls in Angular