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

问题描述 投票:0回答:1

我有一个项目,其中包含一些 protobuf 定义并为多种(Python 和 Rust)语言构建代码。文件夹结构是这样的:

  • 根/
    • 原型/
      • 我的原型
    • 蟒蛇/
    • 铁锈/
      • 货物.toml
      • 构建.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
似乎在
package
文件夹中创建了一个专用的
target
子文件夹。
protoc
还告诉我:

忽略 ../proto/ 因为它不存在

我想知道为什么这适用于

build
,但不适用于
publish
。有人可以解释一下吗?它可以解决吗?还是这种访问相对路径中的文件是一个坏主意?

rust protocol-buffers rust-cargo prost
1个回答
0
投票

您可以使用环境变量Cargo设置

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(())
}
© www.soinside.com 2019 - 2024. All rights reserved.