6个版本
0.4.2 | 2024年1月24日 |
---|---|
0.4.1 | 2023年11月5日 |
0.3.0 | 2023年6月17日 |
0.2.1 | 2023年5月28日 |
#3 在 #cargo-script
1,160 每月下载量
用于 3 crates
46KB
936 行
windows exe info
一个Cargo
构建脚本库,用于在无需使用外部.rc
文件的情况下,处理Windows图标、版本信息和应用程序清单的包含。
受embed_resource启发并使用。当windres
命令不在PATH中时,请使用embed_resource。
通用的图像格式转换需要imagemagick。需要将imagemagick放在PATH中,以便转换函数可以正常工作。如果找不到imagemagick,构建脚本将失败。
在没有imagemagick的情况下,唯一可用的图标格式是.ico
。
该crate仅适用于Windows,因为资源脚本是Windows特有的。默认情况下,它将检查是否正在为Windows编译,否则将忽略链接调用。需要Build_cfg才能进行跨架构编译。
特性
- build_cfg: 使用build_cfg来定位正确的架构
- embed_resource: 使用embed_resource crate来选择
.rc
编译器 - icon_ico: 基本的图标链接
- icon_placeholder: 添加占位符todo图标
- icon_png: 使用imagemagick支持png格式
- icon_magick: 使用imagemagick支持通用格式
- icon_autodetect: 根据文件扩展名自动检测图标格式并使用特定的转换函数(ico、png或magick)
- manifest: 允许在可执行文件中嵌入Windows应用程序manifest xml文件
manifest特性并非必需用于嵌入版本信息或图标 - versioninfo: 允许向可执行文件添加Windows版本信息
- 仅限Windows:检查编译目标是否为Windows,如果不是则不链接
默认功能有 embed_resource
、icon_ico
、icon_placeholder
、versioninfo
和 windows_only
重大变更
0.4.2
- 无
0.4.1
- 默认添加
windows_only
功能,以防止与非Windows操作系统链接
0.4.0
icon_xxx
、icon_svg
和icon_xcf
都已被icon_magick
替换- 现在
manifest
功能是可选的
示例
将 此crate 添加到您的构建依赖项中
在 Cargo.toml
# the rest of the [package] section
build = "build.rs"
[build-dependencies]
windows_exe_info = "0.4"
- 添加图标(
.ico
)
在 build.rs
extern crate windows_exe_info;
fn main(){
windows_exe_info::icon::icon_ico(std::path::Path::new("PATH/TO/ICON.ico"));
}
- 根据Cargo的环境变量添加版本信息
在 build.rs
中选择以下选项之一
extern crate windows_exe_info;
fn main(){
// simple option 1
windows_exe_info::versioninfo::link_cargo_env();
// simple option 2
windows_exe_info::versioninfo::VersionInfo::from_cargo_env().link().unwrap();
// advanced option
windows_exe_info::versioninfo::VersionInfo::from_cargo_env_ex(
Some("comment"),
Some("company name"),
Some("copyright"),
Some("trademarks")
).link().unwrap();
// these three function calls do effectively the same but are required only once
}
- 手动添加版本信息
在 build.rs
extern crate windows_exe_info;
fn main(){
use windows_exe_info::versioninfo::*;
// Change these attributes as you need
VersionInfo {
file_version: Version(0, 1, 0, 0),
product_version: Version(0, 1, 0, 0),
file_flag_mask: FileFlagMask::Win16,
file_flags: FileFlags {
debug: false,
patched: false,
prerelease: false,
privatebuild: false,
infoinferred: false,
specialbuild: false,
},
file_os: FileOS::Windows32,
file_type: FileType::App,
file_info: vec![FileInfo {
lang: Language::USEnglish,
charset: CharacterSet::Multilingual,
comment: None,
company_name: "".into(),
file_description: "An example build script".into(),
file_version: "0.1.0.0".into(),
internal_name: "example".into(),
legal_copyright: None,
legal_trademarks: None,
original_filename: "example.exe".into(),
product_name: "Example".into(),
product_version: "0.1.0.0".into(),
private_build: None,
special_build: None,
}],
}
.link().unwrap();
}
- 嵌入 清单
在 Cargo.toml
中添加清单功能
windows_exe_info = {version = "0.4", features = ["manifest"]}
在 build.rs
extern crate windows_exe_info;
fn main(){
windows_exe_info::manifest::manifest(std::path::Path::new("PATH/TO/MANIFEST.XML"));
}
依赖项
~0–9.5MB
~46K SLoC