如何在 miri 下为货物依赖项使用不同的源

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

我的项目取决于

bitvec
板条箱(问题不需要板条箱知识)。

不幸的是,这个板条箱没有得到积极维护,并且有一些 美里下的问题。 一个仁慈的灵魂已经解决了与美里相关的问题(并制作了一个陈旧的公关)。

为了在我的项目中使用 miri,我尝试使用这个修补版本, 但我不想依赖某些 github 存储库来获取发布版本, 所以我在我的

Cargo.toml

中尝试了以下方法
[target.'cfg(miri)'.dependencies]
bitvec = { git = "https://github.com/djkoloski/bitvec.git", branch = "fix_miri" }

[target.'cfg(not(miri))'.dependencies]
bitvec = "1.0.1"

不幸的是,这给了我以下错误:

~$ MIRIFLAGS="-Zmiri-tree-borrows" cargo +nightly miri test 
thread 'main' panicked at src/tools/miri/cargo-miri/src/util.rs:235:80:
called `Result::unwrap()` on an `Err` value: CargoMetadata { stderr: "error: failed to load manifest for workspace member `<myproject>`\nreferenced by workspace at `<myworkspace>/Cargo.toml`\n\nCaused by:\n  failed to parse manifest at `<myproject>/Cargo.toml`\n\nCaused by:\n  Dependency 'bitvec' has different source paths depending on the build target. Each dependency must have a single canonical source path irrespective of build target.\n" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

有没有办法只在 miri 下使用这个依赖?

rust rust-cargo miri
1个回答
0
投票

我最终使用了以下解决方法, 谢谢你@eggypal 他对重命名依赖项的评论为我指明了正确的方向。


货物.toml
[target.'cfg(miri)'.dependencies]
bitvec_miri = { git = "https://github.com/djkoloski/bitvec.git", branch = "fix_miri" }

[target.'cfg(not(miri))'.dependencies]
bitvec_non_miri = "1.0.1"
src/bitvec.rs
#[cfg(miri)]
pub use bitvec_miri::*;

#[cfg(not(miri))]
pub use bitvec_non_miri::*;

现在我只需更换所有的

use bitvec::{/*...*/};

陈述

use crate::bitvec::{/*...*/};
© www.soinside.com 2019 - 2024. All rights reserved.