标签: rust-cargo

如何使用 Cargo 设置环境变量?

我在 Cargo.toml 中列出了一个需要特定环境变量集的依赖项。我可以export FOO=bar在 bash中运行并且一切正常,但是对于我的生活,我无法弄清楚如何在编译时使用 Cargo 导出这个环境变量。我试过设置环境变量build.rs通过std::envCommandprintln!所有没有效果:

// build.rs
fn main() {
    Command::new("ls")
        .env("FOO", "bar")
        .spawn()
        .expect("ls command failed to start");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
    std::env::set_var("FOO", "bar");
}
Run Code Online (Sandbox Code Playgroud)
// build.rs
fn main() {
    println!("cargo:rustc-env=FOO=bar");
}
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

22
推荐指数
1
解决办法
9220
查看次数

无法解析清单 - 未指定目标

我是Rust的新手,并试图用Cargo建立一个测试项目.我Cargo.toml看起来像:

[package]
name = "rust-play"
version = "0.0.1"
authors = [ "Bradley Wogsland <omitted>" ]
Run Code Online (Sandbox Code Playgroud)

(但实际的TOML文件不会省略我的电子邮件).当我cargo build收到以下错误时:

错误:无法解析清单 /Users/wogsland/Projects/rust-play/Cargo.toml

引起:清单中没有指定目标src/lib.rs,src/main.rs,[lib]部分或[[bin]]部分必须存在

我的main功能在一个src/test.rs文件中.我需要在TOML文件中指定吗?如果是这样,怎么样?我尝试添加

target = "src/test.rs"
Run Code Online (Sandbox Code Playgroud)

无济于事.

rust rust-cargo

21
推荐指数
2
解决办法
5650
查看次数

如何自动修复 Rust 中未使用的导入?

有什么方法可以自动修复 Rust 中未使用的导入吗?我已经看到了cargo fix,它确实有效,但它也做了很多其他修复。有什么方法可以告诉cargo fix只修复未使用的导入(最好在指定的文件中)而不修复其他任何东西?

附带问题:有什么方法可以让 IntelliJ 做到这一点吗?通常的快捷方式(Cmd+Option+O)适用于其他语言,但对于 Rust,它只是重新排序导入。

intellij-idea rust rust-cargo

21
推荐指数
3
解决办法
1万
查看次数

如何使用`cfg`和Cargo进行条件编译?

我想cfg用Cargo 有条件地编译我的源代码,在谷歌搜索一段时间后,似乎解决方案是使用cargo --features.

http://doc.crates.io/manifest.html

我尝试添加一些

#[cfg(feature = "foo")]
Run Code Online (Sandbox Code Playgroud)

在源代码和

cargo build --features foo
Run Code Online (Sandbox Code Playgroud)

,但它说

Package `xxx v0.0.1 (file:///C:/yyy/xxx)` does not have these features: `foo`
Run Code Online (Sandbox Code Playgroud)

我怎样才能让货物识别出这些特征?我必须添加一些东西Cargo.toml吗?

这里的版本rustccargo我使用:

C:\>rustc --version
rustc 0.13.0-nightly (42deaa5e4 2014-12-16 17:51:23 +0000)

C:\>cargo --version
cargo 0.0.1-pre-nightly (5af754d 2014-12-18 01:50:48 +0000)
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

20
推荐指数
3
解决办法
9732
查看次数

如何选择不运行doc测试?

我正在写一个Rust库,我想在我的文档中提供一些示例

  1. 编译作为运行的一部分 cargo test
  2. 不会运行.

这可能吗?

我正在编写一个数据库客户端库,这些示例使用了一个假设的,不存在的数据库服务器.因此,示例在运行时总是会失败,但重要的是示例在语法上是有效的.因此我的要求如上.

如果没有办法做我想做的事,那么如何选择不cargo test运行特定的文档测试?即,cargo run编译并运行一些文档测试但完全忽略其他一些?

rust rust-cargo

20
推荐指数
2
解决办法
2532
查看次数

如何使用Cargo从建筑物获得装配输出?

虽然我已经看到rustc直接使用输出程序集的文档,但必须手动提取Cargo使用的命令并编辑它们来编写程序集是很繁琐的.

有没有办法运行编写汇编文件的货物?

assembly rust rust-cargo

20
推荐指数
3
解决办法
8468
查看次数

如何更改默认的 rustc / Cargo 链接器?

我想让 rustclld用作链接器,而不是ld在特定的板条箱中。所以我.cargo/config在我的项目目录中创建以下内容:

[target.x86_64-unknown-linux-gnu]                                                                   
linker = "ld.lld"
Run Code Online (Sandbox Code Playgroud)

这会导致链接器错误:

$ cargo build
...
  = note: ld.lld: error: unable to find library -ldl
          ld.lld: error: unable to find library -lrt
          ld.lld: error: unable to find library -lpthread
          ld.lld: error: unable to find library -lgcc_s
          ld.lld: error: unable to find library -lc
          ld.lld: error: unable to find library -lm
          ld.lld: error: unable to find library -lrt
          ld.lld: error: unable to find library -lpthread
          ld.lld: error: unable to find …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo lld

19
推荐指数
3
解决办法
6758
查看次数

错误:无法为“ring v0.16.20”运行自定义构建命令

我想在带有 M1 芯片的 macOS Monterey 12.3.1 中使用 musl 构建 rust 1.59 项目,然后运行以下命令:

rustup target add x86_64-unknown-linux-musl
cargo build --release --target=x86_64-unknown-linux-musl
Run Code Online (Sandbox Code Playgroud)

但项目构建输出如下:

error: failed to run custom build command for `ring v0.16.20`

Caused by:
  process didn't exit successfully: `/Users/foo/source/reddwarf/backend/fortune/target/release/build/ring-98ce1debbcda4321/build-script-build` (exit status: 101)
  --- stdout
  OPT_LEVEL = Some("3")
  TARGET = Some("x86_64-unknown-linux-musl")
  HOST = Some("aarch64-apple-darwin")
  CC_x86_64-unknown-linux-musl = None
  CC_x86_64_unknown_linux_musl = None
  TARGET_CC = None
  CC = None
  CROSS_COMPILE = None
  CFLAGS_x86_64-unknown-linux-musl = None
  CFLAGS_x86_64_unknown_linux_musl = None
  TARGET_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo musl alpine-linux

19
推荐指数
1
解决办法
1万
查看次数

Cargo可以在不构建应用程序的情况下下载和构建依赖项吗?

有没有办法告诉Cargo安装和构建我的所有依赖项,但是没有尝试构建我的应用程序?

我想cargo install会这样做,但它实际上也一直在构建我的应用程序.我想进入一个状态,在那里cargo build可以找到所有依赖项,但无需触及/src目录.


我真正想要实现的目标:

我正在尝试为Rust应用程序构建Docker镜像,我想在其中执行以下步骤:

建立时间(docker build .):

  1. 导入已安装防锈工具的docker镜像
  2. 添加我的Cargo.toml和Cargo.lock文件
  3. 下载并构建所有依赖项
  4. 将我的源目录添加到图像
  5. 构建我的源代码

运行时间(docker run ...):

  1. 运行应用程序

我已经尝试了以下内容Dockerfile,但是指示的步骤也构建了我的应用程序(由于源目录尚未存在,当然会失败):

FROM jimmycuadra/rust

ADD Cargo.toml /source
ADD Cargo.lock /source

RUN cargo install # <-- failure here

ADD src /source/src
RUN cargo build

ENTRYPOINT cargo run
Run Code Online (Sandbox Code Playgroud)

我想将安装依赖项步骤与实际构建我的应用程序分开的原因是,如果我不更改依赖项,我希望Docker能够使用已安装和构建所有依赖项的缓存映像.因此,我不能ADD /src /source/src,直到安装依赖条件,因为当我改变我自己的代码,将无效缓存图像.

rust rust-cargo

18
推荐指数
4
解决办法
2173
查看次数

不能在 `cargo` 中使用 `-Z macro-backtrace` 不稳定选项

我正在编写 rust 宏,但遇到了有关我无法理解的宏的错误。为了更好地理解它,我尝试通过设置-Z macro-backtrace不稳定选项并再次编译来遵循编译器的建议。这是说的建议:

note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
Run Code Online (Sandbox Code Playgroud)

但是这样做:

cargo run -Z macro-backtrace
Run Code Online (Sandbox Code Playgroud)

结果如下:

error: unknown `-Z` flag specified: macro-backtrace
Run Code Online (Sandbox Code Playgroud)

我已经通过rustup override nightly在项目目录中运行并rustup default nightly为将来使用此功能而完全切换到夜间工具链,但错误仍然存​​在。

在通过网络挖掘时,我找到了一种列出所有-Z选项的方法cargo -Z help


Available unstable (nightly-only) flags:

    -Z avoid-dev-deps   -- Avoid installing dev-dependencies if possible
    -Z minimal-versions -- Install minimal dependency versions instead of maximum
    -Z no-index-update  -- Do not update the …
Run Code Online (Sandbox Code Playgroud)

nightly-build rust rust-cargo rustup

18
推荐指数
1
解决办法
3233
查看次数