编译和运行rust程序,而不创建单独的货物项目



在执行Rust by Example时,我发现自己为教程中的每个程序创建了一个新的货物项目。

这很快就变得麻烦了。

我尝试过的另一种策略是让我的工作目录结构如下:

src
guessing_game.rs
main.rs
temp.rs

其中main.rs包含

mod guessing_game;
mod temp;
/// Hello
fn main() {
// guessing_game::play();
println!("{}", temp::is_prime(6));
}

CCD_ 2包含

[package]
name = "rust_prog_dump"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
rand = "0.8.4"

我会调用main()中的目标函数,并注释掉其他函数。

我们有其他选择吗?

我看过这个问题和Jon Cairns的帖子。我使用Windows,因此该脚本不适用于我。

我们有其他选择吗?

一种选择是直接使用rustc手动编译,但如果您想要依赖关系,这会很烦人。

另一种选择是在机箱中有多个二进制文件,然后您可以使用--bin:选择要编译(并运行(的二进制文件

> cargo new multibin
Created binary (application) `multibin` package
> cd multibin
> mkdir src/bin
> echo 'fn main() { println!("test 1"); }' > src/bin/test1.rs
> echo 'fn main() { println!("test 2"); }' > src/bin/test2.rs
> echo 'fn main() { println!("primary"); }' >| src/main.rs
> cargo r
error: `cargo run` could not determine which binary to run. Use the `--bin` option to specify a binary, or the `default-run` manifest key.
available binaries: multibin, test1, test2
> cargo r --bin multibin
Compiling multibin v0.1.0 (/private/tmp/multibin)
Finished dev [unoptimized + debuginfo] target(s) in 0.44s
Running `target/debug/multibin`
primary
> cargo r --bin test1
Compiling multibin v0.1.0 (/private/tmp/multibin)
Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/test1`
test 1
> cargo r --bin test2
Compiling multibin v0.1.0 (/private/tmp/multibin)
Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/test2`
test 2

正如你所看到的,你可以有一个src/main.rs,它将继承机箱的名称,但通常如果你开始有多个二进制文件,你会把它们都放在src/bin中。

第三种选择是使用cargo-script(迄今为止最方便但长期未维护的,IIRC仅与2015版兼容(或runner或类似的东西(可能还有其他(。

Masklinn的多二进制解决方案与一个好的IDE配合使用时就像一个魅力(一键执行(。

使用IntelliJ社区版+Rust和TOML插件

  1. 提示时选择TOML文件。(仅在导入项目时(
  2. 转到项目设置>模块。将src/bin标记为Source文件夹
  3. 重新启动IDE。您将有Current File作为可用的运行配置

使用VS代码+代码运行程序扩展

  1. 单击出现在fn main()上方的Run|Debug按钮。请注意,如果存在依赖项,则常规的"运行代码"快捷方式(Ctrl+Alt+N(可能不起作用

最新更新