如何制作一个能在不使用 `cargo run` 的情况下执行的 Rust 程序?

15

如何在Rust中编写一个程序,可以通过点击文件而不是使用cargo run从任何地方执行?

是否有适用的crate?我已经编写了贪吃蛇游戏的代码,希望能通过点击文件来运行它。


1
当您运行cargo build --release时,可执行文件将在target/release目录中创建。请注意,它可能无法从“任何地方”执行,而只能在使用与您所使用的操作系统和硬件兼容的机器上执行;例如,如果您在运行Windows的PC上构建,则生成的可执行文件将在运行Windows的其他PC上运行。这是您要寻找的内容吗? - user4815162342
1
此外,针对上面的评论进行扩展,这个可执行文件是自动自包含的,可以通过点击运行。无需创建Crate,也不需要Cargo。它应该可以在使用您编译的平台(例如Windows)的任何地方工作,除非您使用具有系统库依赖性的特定Crate。 - nnnmmm
5个回答

24

如果你使用以下方式编译Rust应用程序:

cargo build --release

它将在 ./target/release 目录下放置一个二进制文件。因此,如果您的应用程序名为 snake_game,您可以使用 ./target/release/snake_game 运行它,或者双击该文件。

这个二进制文件是完全自包含的,所以您可以将其移动或复制到计算机上的其他地方。


1
正如 OP 提到游戏,我猜测有资源可用(如何在 Rust 可执行文件中嵌入资源?)。正如 OP 提到“点击”,我猜测他们正在使用 Windows。 - Shepmaster
通过这种方式,二进制文件已经被放置,但是它无法打开!这也适用于Linux吗?我是一个Linux用户。 - shakaib naqvi

12

首先为发布构建你的二进制文件

cargo build --release 

下一步处理权限

通常使用chmod +x target/release/whateverYourProgramIsCalled使其可执行,但是cargo已经为我们完成了此操作。

您可以检查它的八进制权限

ls -l target/release/whateverYourProgramIsCalled
chmod +x target/release/whateverYourProgramIsCalled
ls -l target/release/whateverYourProgramIsCalled

正如您所看到的,没有任何改变...权限已经正确,可以执行

运行可执行文件

./whateverYourProgramIsCalled 

可选项:在任何地方运行

您可以从命令行在任何地方运行该二进制文件

要实现这一点,您需要将其添加到您的路径中

对于Mac,您可以从/etc/paths将其添加到路径中

无论您喜欢使用的编辑器是什么...vi, code等等...

sudo code /etc/paths

我添加了这样一个路径,保存并使用密码进行身份验证

/Users/`whoami`/code/rust/binaries

whoami命令被`包围。

接下来,将新二进制文件复制到它所需的位置,在那个二进制文件夹中。

cp whateverYourProgramIsCalled /Users/`whoami`/code/rust/binaries

然后打开一个新的终端窗口

检查你的命令是否在路径中

where whateverYourProgramIsCalled

随时随地运行您的命令

whateverYourProgramIsCalled 

欣喜


3

我想在这里添加另一个答案,不确定它是否与更近期的 Rust 版本相关。

如果在项目根目录中只运行命令 cargo install --path .,它将添加到 cargo 并允许您仅使用项目名称运行二进制文件。


1

你可以使用rustc来进行另一种方法。它将在与您的文件相同的目录中创建一个可执行二进制文件。

确保您在src目录中,并且您的文件名为main.rs。

rustc main.rs
./main

使用rustc的优点是您可以运行任何文件而不仅仅是main.rs。只需执行以下操作:
 rustc filename.rs
 ./filename

你可以从终端运行它,也可以通过点击该文件来运行。


缺点是你需要手动下载每个依赖项,然后将每个依赖项作为参数传递给rustc。我看不出任何优点。 - Peter Hall
2
另外,使用 cargo,您可以在 Cargo.toml[bin] 部分中指定除 main.rs 以外的其他二进制入口点。 - Peter Hall

0
cargo install --path .

如果你想将它作为另一个本地安装的命令行应用程序运行, 我不知道为什么有人建议手动开始sudo cping sh**...

你的回答可以通过提供更多支持性的信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到更多关于如何撰写好回答的信息。 - undefined
这个解决方案已经被另一个答案提出过了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接