rust 使用相对路径适用于“货物构建”,但不适用于“货物发布”

gg58donl  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(159)

我有一个项目,它包含一些protobuf定义,并为多种语言(Python和Rust)构建代码。文件夹结构如下:

  • 根目录/
  • 原型/
  • my.proto
  • Python皮/
  • rust /
  • Cargo.toml
  • build.rs
  • ...

我使用prost从原文件中生成Rust代码。我的build.rs看起来像这样:

use std::io::Result;
fn main() -> Result<()> {
    prost_build::compile_protos(
        //  Files to be compiled
        &["my.proto"],
        //  Include folder for protoc
        &["../proto/"])?;
    Ok(())
}

如果我运行cargo build,这可以正常工作,但是它不能运行cargo publish。在输出中,我看到publish似乎在target文件夹中创建了一个专用的package子文件夹。protoc还告诉我:
忽略../proto/,因为它不存在
我想知道为什么这对build有效,而对publish无效。有人能解释一下吗?它能解决吗?或者这种访问相对路径中的文件是个坏主意吗?

c2e8gylq

c2e8gylq1#

您可以使用环境变量Cargo sets:

use std::io::Result;

fn main() -> Result<()> {
    let folder_path = Path::new(std::env::var_os("CARGO_MANIFEST_DIR").unwrap()).join("../proto");
    prost_build::compile_protos(
        //  Files to be compiled
        &["my.proto"],
        //  Include folder for protoc
        &[folder_path],
    )?;
    Ok(())
}

相关问题