作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道如何使用prost_build
生成代码
我看过文档,但是没有给出生成代码的详细命令。我输入 cargo build
但没有生成任何代码。
我的build.rs
extern crate prost_build;
fn main() {
prost_build::compile_protos(&["src/items.proto"],
&["src/"]).unwrap();
}
我的 Cargo.toml
[package]
name = "snazzy"
version = "0.1.0"
authors = ["xxx <xxx@xxx.com>"]
edition = "2018"
build = "build.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bytes = "0.4"
prost = "0.5"
[build-dependencies]
prost-build = { version = "0.4" }
我的 items.proto
syntax = "proto3";
package snazzy.items;
message Shirt {
enum Size {
SMALL = 0;
MEDIUM = 1;
LARGE = 2;
}
string color = 1;
Size size = 2;
}
我的文件树:
.
├── build.rs
├── Cargo.lock
├── Cargo.toml
└── src
├── items.proto
└── main.rs
没有构建错误,但我看不到生成的代码在哪里。任何帮助将不胜感激!
最佳答案
你是对的,这在文档中没有很好地解释,这是因为构建脚本的工作方式。嗯,部分。
您的 protobuf 实现位于 target/{yourArch}/build/{yourCrateName}-{hash}/out
下。
如果没有环境变量,这将非常难以实现。文档的重要部分是以下代码片段突出显示了包含内容:
pub mod items {
include!(concat!(env!("OUT_DIR"), "/snazzy.items.rs"));
}
这包括 OUT_DIR
中可用的文件(上面指定的目录,在编译期间自动填充)和 protobuf 实现的名称(protobuf 文件中的包名称),并使其所有crate::items
下可用的内容结构。
将文件驻留在构建目录中是有意义的,因为它们是构建工件。在你的 crate 的 src
文件夹中生成代码会导致困惑,无论是在版本控制还是项目完整性方面(你会有重复的信息和 protobuf 实现,前提是它是理智,对你来说不是重要的。但是,功能蓝图才是)。
关于rust - 如何在 Rust 中使用 prost 生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58040435/
我是一名优秀的程序员,十分优秀!