将图标资源附加到Rust应用程序

时间:2015-05-17 20:24:03

标签: rust

如何将图标资源附加到Rust应用程序?我已经看过它是如何在C中完成的,但我不清楚它在Rust中是如何工作的。这将在Windows上。我知道Linux和OS X的工作方式不同。如果有人对OS X有任何提示,那也很棒。

2 个答案:

答案 0 :(得分:5)

Rust没有Windows的图标文件的概念,所以你可以像在C中一样,尽管通过Rust外部函数接口(FFI)。存在用于Windows API的FFI包装器,尤其是winapi

Here是一个示例,显示如何将图标与可执行文件关联(通过.rc文件)。

答案 1 :(得分:4)

视窗

设置 .exe 文件图标的一种简单方法是使用 winres crate。首先,在您的 Cargo.toml:

中添加 winres 作为构建依赖项
[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

要在 macOS 上设置图标,您需要将可执行文件捆绑到 .app 中。 .app 实际上是一个目录,而不是一个文件。它看起来像这样:

  • 我的应用程序.app
    • 内容
      • Info.plist — 此 XML 文件包含有关您的应用程序的信息,包括二进制文件的名称和图标文件的位置:
        <key>CFBundleExecutable</key>
        <string>myapp</string>
        <key>CFBundleIconFile</key>
        <string>AppIcon.icns</string>
        
      • MacOS
        • myapp — 来自 target/release
        • 的二进制文件
      • 资源
        • AppIcon.icns

macOS 应用程序通常以 .dmg 文件的形式分发。发布脚本可以构建二进制文件,将其捆绑到 .app 中,然后将其捆绑到 .dmg 中,以及指向 /Applications 的符号链接,以便用户更轻松地“安装”将应用移到那里。

这里是 sample .dmg contentsthe corresponding release script