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

Chr*_*oot 4 rust

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

Jor*_*eña 6

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

下面是一个示例,说明如何将图标与可执行文件关联(通过.rc文件).


Fen*_*nhl 6

视窗

为您的.exe文件设置图标的一种简单方法是使用winres crate。首先,将 winres 添加为您的构建依赖项Cargo.toml

[target.'cfg(windows)'.build-dependencies]
winres = "0.1"
Run Code Online (Sandbox Code Playgroud)

然后,添加一个构建脚本build.rs在您的 旁边命名的文件Cargo.toml):

[target.'cfg(windows)'.build-dependencies]
winres = "0.1"
Run Code Online (Sandbox Code Playgroud)

请注意,这并没有更新任务栏或标题栏中显示的图标。必须通过您的 GUI 框架完成的设置,例如iced最近添加了一种配置它的方法

苹果系统

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

  • 我的 App.app
    • 内容
      • Info.plist — 此 XML 文件包含有关您的应用程序的信息,包括二进制文件的名称和图标文件的位置:
        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(())
        }
        
        Run Code Online (Sandbox Code Playgroud)
      • 苹果系统
        • myapp — 来自的二进制文件 target/release
      • 资源
        • 应用程序图标

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

下面是示例.dmg内容相应的发布脚本