标签: rust-cargo

如何相对于项目位置进行rustc-link-search?

我正在围绕C库创建一个Rust包装器。我已经将C库放在lib目录中,并build.rs用来告诉编译器在哪里找到要链接的库:

println!("cargo:rustc-link-lib=static=wrapped-lib");
println!(r"cargo:rustc-link-search=lib\");
Run Code Online (Sandbox Code Playgroud)

当我构建库时,此方法工作正常,但是依赖包装器库的下游库会出现编译失败:

println!("cargo:rustc-link-lib=static=wrapped-lib");
println!(r"cargo:rustc-link-search=lib\");
Run Code Online (Sandbox Code Playgroud)

问题似乎在于:

println!(r"cargo:rustc-link-search=lib\");
Run Code Online (Sandbox Code Playgroud)

编译客户端库时,这并不指向repository\checked_out_project\lib而是在本地查找,因为在依赖项中指定绝对路径是可行的:

println!(r"cargo:rustc-link-search=C:\users\id\.cargo\..\lib\");
Run Code Online (Sandbox Code Playgroud)

我还指示货运将lib目录包含在wrapper-lib中,如下所示:

include = ["lib/**/*"]
Run Code Online (Sandbox Code Playgroud)

如何告诉编译器相对于依赖关系,而不是正在构建的项目?我认为这应该可行:

println!(r"cargo:rustc-link-search=lib\");
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

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

如何在每个文件的基础上执行`货物工作台?

我正在解决Project Euler问题,我将每个问题都放在另一个文件中.当我尝试针对每个问题采用不同的方法时,我会在其各自的文件中为每个问题创建一系列基准.

我的目录结构如下:

euler/
    Cargo.lock
    Cargo.toml
    README.md
    src/
        main.rs
        p001.rs
        p002.rs
        ...etc.
Run Code Online (Sandbox Code Playgroud)

内容main.rs是:

#![feature(test)]

extern crate primes;
extern crate test;

mod p001;
mod p002;
// ... etc

fn main() {}
Run Code Online (Sandbox Code Playgroud)

当我运行时cargo bench,它会为我项目中的每个文件运行基准测试:

$ cargo bench
    Finished release [optimized] target(s) in 0.02 secs
     Running target/release/deps/euler_rust-5be87dff38a04da2

running 11 tests
test p001::bench_fold_sum                     ... bench:      12,955 ns/iter (+/- 13,501)
test p001::bench_for_sum                      ... bench:      11,385 ns/iter (+/- 7,383)
test p002::bench_for_sum                      ... bench:         270 ns/iter (+/- 90)
test p002::bench_takewhile_filter_mutable_sum ... …
Run Code Online (Sandbox Code Playgroud)

benchmarking rust rust-cargo

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

如何使用Cargo运行项目的示例?

我正在尝试从该项目运行示例代码。按照货运文档上的说明,我执行了以下操作:

git clone https://github.com/basiliscos/rust-procol-ftp-client
cd rust-procol-ftp-client
cargo run 
cargo test
Run Code Online (Sandbox Code Playgroud)

cargo test还应该根据Rust文档编译示例

尽管cargo test执行成功,但是当我转到target/debug目录时,找不到可执行文件ftp-get(这是示例代码)。该target/debug/examples目录也为空。

运行此示例的最佳方法是什么?

rust rust-cargo

1
推荐指数
2
解决办法
467
查看次数

如果我针对大小 (z) 而不是速度 (3) 进行优化,我会改变什么速度增益?

我读了两个:

我不明白的是,如果我使用,我会改变哪种速度增益:

[profile.release]
opt-level = "z"
Run Code Online (Sandbox Code Playgroud)

代替:

[profile.release]
opt-level = 3
Run Code Online (Sandbox Code Playgroud)
  • 今天opt-level = 3opt-level运行速度的最佳设置(对于部分)是否正确?

  • 如果我改为使用,opt-level = "z"我会降低运行时性能,对吗?

我对构建/编译速度不感兴趣。

optimization compilation llvm rust rust-cargo

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

Cargo.toml:如何根据我的 crate 的特征选择依赖项的特征?

场景如下:我的 crate 依赖于num-bigint,并且可选依赖于rand

[dependencies]
num-bigint = { version = "0.2" }
rand = { version = "0.7", optional = true }
Run Code Online (Sandbox Code Playgroud)

什么时候 rand在我的箱子上被禁用时,一切都很好。

rand在我的箱子上启用时,我希望也启用该rand功能num-bigint。我怎样才能做到这一点?

这是我尝试过的:

[target.'cfg(feature = "rand")'.dependencies]
num-bigint = { version = "0.2", features = ["rand"] }
Run Code Online (Sandbox Code Playgroud)

这有效,但我收到此警告:

warning: Found `feature = ...` in `target.'cfg(...)'.dependencies`. This key is not supported for selecting dependencies and will not work as expected. Use the [features] section instead: https://doc.rust-lang.org/cargo/reference/features.html
Run Code Online (Sandbox Code Playgroud)

我应该忽略警告,还是有更好的方法来做到这一点?我检查了该网页,但找不到任何有用的信息。

dependencies rust rust-cargo toml

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

重命名 main.rs 并与货物一起使用

是否可以更改名称main.rs并仍然具有cargo run工作之类的命令?

如果可能的话,有人可以给我一个如何让cargo run目标说的例子example.rs吗?

rust rust-cargo

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

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

Rust 项目可以共享构建工件吗?

我有一个生成静态库的 Rust 项目,还有其他几个项目通过Cargo.toml条目创建依赖于该库的应用程序:

[dependencies]
lib_project = { path = "/path/to/lib_project" }
Run Code Online (Sandbox Code Playgroud)

目前,每个应用程序将lib_project在其构建期间构建一个单独的副本。有没有办法让他们使用现有的构建库/path/to/lib_project/target?或者更一般地说,有没有办法让多个 Rust 项目共享公共依赖项的构建工件?

static-libraries rust rust-cargo

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

未解决的导入`core::task::Wake`

我有一个用 Rust 编写的 Web 服务器,我想在 Heroku 上部署它。服务器在我的机器上本地编译并运行良好(见下图),但是,它无法在 rust 上编译,并且出现编译错误。

error[E0432]: unresolved import `core::task::Wake`

   --> /tmp/codon/tmp/cache/cargo/registry/src/github.com-1ecc6299db9ec823/standback-0.2.16/src/lib.rs:520:13

    |

520 |     pub use core::task::Wake;

    |             ^^^^^^^^^^^^----

    |             |           |

    |             |           help: a similar name exists in the module (notice the capitalization): `wake`

    |             no `Wake` in `task`

error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

在我的机器上完美运行: 在我的机器上完美运行

不在 Heroku 中编译 不在 Heroku 中编译

(源代码可以在这里找到)

heroku rust rust-cargo

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

将项目设置为默认每晚使用

如何将 Cargo 项目设置为默认使用 nightly 构建和运行(即cargo build实际上是cargo +nightly build),而不将 nightly 设置为全局默认值?


这与如何在 Rust 工具链之间切换不同。如果您阅读了这两个问题,您会看到该问题是关于在全局范围内切换 Rust 工具链,而我想在更改全局设置的情况下切换 Rust 工具链。

rust rust-cargo

1
推荐指数
2
解决办法
538
查看次数