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 构建工具
20,164 个月下载量
用于 17 个crate (14 个直接使用)
95KB
546 行
winresource
一个小的Rust库,用于帮助向资源(元信息和图标)添加到可移植可执行文件(Windows可执行文件和动态库)。更多信息:API文档和发布的crate。
默认情况下,元数据从包描述中继承,但也可以在构建脚本中手动设置或覆盖,或者在[package.metadata.winresource]
部分中在Cargo.toml
中覆盖。
注意:winresource
是winres的分支,它不再支持Rust 1.61或更高版本,并且已被停止维护。
入门指南
为此crate正常工作,您需要安装相应的工具。如果没有这些工具,Windows目标的构建过程将失败。前提条件取决于您的宿主操作系统和目标ABI。
在Windows上编译
如果您使用的是带有MSVC ABI的Rust,您需要Windows SDK中的rc.exe
。构建脚本将在注册表中搜索Windows SDK的位置。
如果您使用的是带有GNU ABI的Rust,您需要MinGW-w64中的windres.exe
和ar.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资源管理器的文件属性中显示:
FileDescription
、ProductName
、ProductVersion
、OriginalFilename
和LegalCopyright
有关可执行文件/库的版本信息部分的更多详细信息,请参阅MSDN。
关于本项目
本项目原始作者和维护者使用此crate进行他们的个人项目,尽管在该环境中已进行过测试,但我们不知道其行为是否在其他地方相同。
简而言之,我们非常依赖您的错误报告和功能建议来改进此crate。
依赖关系
~305–550KB
~12K SLoC