#executable #icons #metadata #build-script #portable #resources #set

build winresource

为可执行文件创建和设置Windows图标和元数据

6个版本

使用旧的Rust 2015

0.1.17 2023年8月22日
0.1.16 2023年7月22日
0.1.15 2023年2月14日
0.1.14 2022年11月20日

#39 in 构建工具

Download history 4401/week @ 2024-05-01 4905/week @ 2024-05-08 5137/week @ 2024-05-15 5217/week @ 2024-05-22 4190/week @ 2024-05-29 3736/week @ 2024-06-05 4392/week @ 2024-06-12 4751/week @ 2024-06-19 4985/week @ 2024-06-26 4576/week @ 2024-07-03 6240/week @ 2024-07-10 4463/week @ 2024-07-17 4477/week @ 2024-07-24 5222/week @ 2024-07-31 5325/week @ 2024-08-07 4516/week @ 2024-08-14

20,164 个月下载量
用于 17 个crate (14 个直接使用)

MIT 许可证

95KB
546

winresource

一个小的Rust库,用于帮助向资源(元信息和图标)添加到可移植可执行文件(Windows可执行文件和动态库)。更多信息:API文档发布的crate

默认情况下,元数据从包描述中继承,但也可以在构建脚本中手动设置或覆盖,或者在[package.metadata.winresource]部分中在Cargo.toml中覆盖。

How winresource sets the properties of a portable executable

注意:winresourcewinres的分支,它不再支持Rust 1.61或更高版本,并且已被停止维护

入门指南

为此crate正常工作,您需要安装相应的工具。如果没有这些工具,Windows目标的构建过程将失败。前提条件取决于您的宿主操作系统和目标ABI。

在Windows上编译

如果您使用的是带有MSVC ABI的Rust,您需要Windows SDK中的rc.exe。构建脚本将在注册表中搜索Windows SDK的位置。

如果您使用的是带有GNU ABI的Rust,您需要MinGW-w64中的windres.exear.exe。注意,MinGW-w64工具链的位置必须在路径环境变量中。

在非Windows OS上进行交叉编译

如果您在非Windows操作系统上进行交叉编译,需要安装mingw-w64交叉编译工具链。

在基于Debian的Linux发行版(如Ubuntu)上,您可以使用以下命令:

sudo apt-get install mingw-w64

在Arch Linux上,安装整个mingw-w64组

sudo pacman -S mingw-w64

在macOS上,您可以使用以下命令获取工具链:

brew install mingw-w64

使用winresource

首先,您需要将构建脚本添加到您的crate(build.rs)中,通过将其添加到crate的Cargo.toml文件中。

[package]
#...
build = "build.rs"

[build-dependencies]
winresource = "0.1"

接下来,您需要编写一个构建脚本。以下是一个简短的示例。

// build.rs

extern crate winresource;

fn main() {
    if std::env::var("CARGO_CFG_TARGET_OS").unwrap() == "windows" {
        let mut res = winresource::WindowsResource::new();
        res.set_icon("test.ico");
        res.compile().unwrap();
    }
}

就是这样。文件test.ico应位于build.rs相同的目录中。元信息(如程序版本和描述)来自Cargo.toml[package]部分。

请注意:在build.rs中使用#[cfg(target_os = "windows")]可能不会按预期工作,因为build.rs是在宿主上执行的。这意味着当编译build.rs时,target_os始终等于host_os。例如,如果我们使用Linux上的rustc并希望交叉编译在Windows上运行的二进制文件,那么build.rs中的target_os"linux"。然而,CARGO_CFG_TARGET_OS始终应该被定义,并且包含实际的目标操作系统,尽管它只能在构建脚本的运行时进行检查。

附加选项

为了方便起见,winresource会解析Cargo.toml中的package.metadata.winresource部分。

[package.metadata.winresource]
OriginalFilename = "PROGRAM.EXE"
LegalCopyright = "Copyright © 2016"
#...

此部分可能包含任意字符串键值对,将包含在可执行文件/库文件的版本信息部分。

以下键具有特殊含义,将在Windows资源管理器的文件属性中显示:

FileDescriptionProductNameProductVersionOriginalFilenameLegalCopyright

有关可执行文件/库的版本信息部分的更多详细信息,请参阅MSDN

关于本项目

本项目原始作者和维护者使用此crate进行他们的个人项目,尽管在该环境中已进行过测试,但我们不知道其行为是否在其他地方相同。

简而言之,我们非常依赖您的错误报告和功能建议来改进此crate。

依赖关系

~305–550KB
~12K SLoC