我在 Cargo.toml 中列出了一个需要特定环境变量集的依赖项。我可以export FOO=bar在 bash中运行并且一切正常,但是对于我的生活,我无法弄清楚如何在编译时使用 Cargo 导出这个环境变量。我试过设置环境变量build.rs通过std::env,Command和println!所有没有效果:
// 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的新手,并试图用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 中未使用的导入吗?我已经看到了cargo fix,它确实有效,但它也做了很多其他修复。有什么方法可以告诉cargo fix只修复未使用的导入(最好在指定的文件中)而不修复其他任何东西?
附带问题:有什么方法可以让 IntelliJ 做到这一点吗?通常的快捷方式(Cmd+Option+O)适用于其他语言,但对于 Rust,它只是重新排序导入。
我想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吗?
这里的版本rustc和cargo我使用:
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库,我想在我的文档中提供一些示例
cargo test这可能吗?
我正在编写一个数据库客户端库,这些示例使用了一个假设的,不存在的数据库服务器.因此,示例在运行时总是会失败,但重要的是示例在语法上是有效的.因此我的要求如上.
如果没有办法做我想做的事,那么如何选择不cargo test运行特定的文档测试?即,cargo run编译并运行一些文档测试但完全忽略其他一些?
虽然我已经看到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) 我想在带有 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) 有没有办法告诉Cargo安装和构建我的所有依赖项,但是没有尝试构建我的应用程序?
我想cargo install会这样做,但它实际上也一直在构建我的应用程序.我想进入一个状态,在那里cargo build可以找到所有依赖项,但无需触及/src目录.
我真正想要实现的目标:
我正在尝试为Rust应用程序构建Docker镜像,我想在其中执行以下步骤:
建立时间(docker build .):
运行时间(docker run ...):
我已经尝试了以下内容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 宏,但遇到了有关我无法理解的宏的错误。为了更好地理解它,我尝试通过设置-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)