首页 文章

无法找到[build-dependencies]部分中列出的crate

提问于
浏览
3

我尝试使用命令 cargo build 编译我的项目 .

build.rs

extern crate csv;

use std::path::Path;
use std::fs::OpenOptions;
use std::io::BufWriter;
use std::io::Write;

#[allow(non_snake_case)]
fn processCSV(filename: &str, sourcePath: &str, enumName: &str) {
    println!("Generate rust source code from schema {}",filename);

    let mut ret: Vec<String> = Vec::new();
    let mut rdr = csv::Reader::from_file(filename).unwrap().flexible(true);
    for record in rdr.records().map(|r| r.unwrap()) {
    }
    let path = Path::new(sourcePath);
    let file = match OpenOptions::new().write(true).create(true).open(&path) {
        Ok(file) => file,
        Err(..) => panic!("Cannot create file {}",path.display()),
    };
    let mut writer = BufWriter::new(file);

    writer.write_all(b"test\n");
}

fn main() {
    processCSV("../schemas/Test.csv", "./src/mod/common/StatusCode.rs", "StatusCode");
}

Cargo.toml

[package]
name = "rust-test"
version = "0.0.1"
build = "build.rs"

[lib]
path = "src/lib.rs"

[dependencies]

[build-dependencies]
csv = "*"

我可以看到这个错误:

src / lib.rs:1:1:1:18错误:无法找到csv src / lib.rs的箱子:1 extern crate csv;

但当我将 flexible(true) 更改为 flexible(false) 时,它编译得很好而没有任何错误 . 我需要做些什么来解决这个问题?

我在Windows 7 64位上使用Rust 1.2.0 .

2 回答

  • 3

    flexible(true) 更改 flexible(false) 对我没有任何影响;都失败了 . 问题是你出于某种原因选择了 build-dependencies ,而不仅仅是 dependencies .

    使用您在答案中提供的 src/lib.rs 文件和此 Cargo.toml 文件:

    [package]
    name = "stack-overflow"
    version = "0.1.0"
    authors = ["A. Developer <a.developer@example.com>"]
    
    [dependencies]
    csv = "*"
    

    它汇编得很好 .

    如果需要在 build.rs 和项目中访问依赖项,则需要在两个部分中包含依赖项 .

  • 5

    构建依赖项是a build script的依赖项,它是在构建主crate之前编译和运行的辅助二进制文件(旨在用于代码生成,构建/查找本机C库等) .

    主代码使用的正常依赖关系应该属于“依赖关系”部分,例如:

    [dependencies]
    csv = "0.14"
    

    还有一个"dev-dependencies"部分,它们只是测试所需的依赖项,即它们被编译并仅用于 cargo test . 这允许板条箱依赖于例如quickcheck来运行测试而不会污染主要工件 .

    总之,运行 cargo build 将执行以下操作:

    • 构建任何 build-dependencies

    • 构建构建脚本(将编译器指向构建的构建依赖项),然后运行它

    • 构建任何 dependencies

    • 构建主包(指向编译器到构建的依赖项)

    运行 cargo test 添加:

    • 构建任何 dev-dependencies

    • 使用 --test 构建主包以为任何源内 #[test] 创建测试运行器(将编译器指向依赖项和dev依赖项)

    • 构建任何外部示例或测试,同时指向依赖项和dev依赖项

相关问题