如何将图标资源附加到Rust应用程序?我已经看过它是如何在C中完成的,但我不清楚它在Rust中是如何工作的。这将在Windows上。我知道Linux和OS X的工作方式不同。如果有人对OS X有任何提示,那也很棒。
答案 0 :(得分:5)
Rust没有Windows的图标文件的概念,所以你可以像在C中一样,尽管通过Rust外部函数接口(FFI)。存在用于Windows API的FFI包装器,尤其是winapi。
Here是一个示例,显示如何将图标与可执行文件关联(通过.rc文件)。
答案 1 :(得分:4)
设置 .exe
文件图标的一种简单方法是使用 winres crate。首先,在您的 Cargo.toml
:
[target.'cfg(windows)'.build-dependencies]
winres = "0.1"
然后,在您的 build.rs
旁边添加一个 build script(一个名为 Cargo.toml
的文件):
use std::io;
#[cfg(windows)] use winres::WindowsResource;
fn main() -> io::Result<()> {
#[cfg(windows)] {
WindowsResource::new()
// This path can be absolute, or relative to your crate root.
.set_icon("assets/icon.ico")
.compile()?;
}
Ok(())
}
请注意,这不会更新任务栏或标题栏中显示的图标。必须通过您的 GUI 框架完成的设置,例如iced 最近添加了 a way to configure this。
要在 macOS 上设置图标,您需要将可执行文件捆绑到 .app
中。 .app
实际上是一个目录,而不是一个文件。它看起来像这样:
<key>CFBundleExecutable</key>
<string>myapp</string>
<key>CFBundleIconFile</key>
<string>AppIcon.icns</string>
target/release
macOS 应用程序通常以 .dmg
文件的形式分发。发布脚本可以构建二进制文件,将其捆绑到 .app
中,然后将其捆绑到 .dmg
中,以及指向 /Applications
的符号链接,以便用户更轻松地“安装”将应用移到那里。
这里是 sample .dmg
contents 和 the corresponding release script。