5

我尝试使用命令编译我的项目cargo 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。

4

2 回答 2

7

改变flexible(false)flexible(true)我没有任何影响;都失败了。问题是您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和项目中的依赖项,则需要在两个部分中都包含依赖项。

于 2015-09-11T14:25:55.250 回答
4

构建依赖项是构建脚本的依赖项,它是在构建主 crate 之前编译和运行的辅助二进制文件(设计用于代码生成,以及构建/查找本机 C 库等)。

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

[dependencies]
csv = "0.14"

还有一个“dev-dependencies”部分,它们是仅用于测试的依赖项,即它们被编译并仅用于cargo test. 这允许 crates 依赖于,例如,quickcheck在不污染主要工件的情况下运行测试。

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

  1. 建立任何build-dependencies
  2. 构建构建脚本(将编译器指向构建的构建依赖项),然后运行它
  3. 建立任何dependencies
  4. 构建主包(将编译器指向构建的依赖项)

运行cargo test添加:

  1. 建立任何dev-dependencies
  2. 构建 main crate--test为任何 in-source 创建一个测试运行#[test]器(将编译器指向依赖项和开发依赖项)
  3. 构建任何外部示例或测试,同时指向依赖项和开发依赖项
于 2015-09-12T06:33:03.480 回答