#cargo-build #build-script #cargo-script #build #manifest #cargo #resources

构建 windows_exe_info

一个用于向Windows可执行文件添加文件信息的Cargo构建脚本库

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

Download history 222/week @ 2024-04-23 461/week @ 2024-04-30 462/week @ 2024-05-07 366/week @ 2024-05-14 137/week @ 2024-05-21 93/week @ 2024-05-28 115/week @ 2024-06-04 136/week @ 2024-06-11 185/week @ 2024-06-18 109/week @ 2024-06-25 80/week @ 2024-07-02 209/week @ 2024-07-09 198/week @ 2024-07-16 175/week @ 2024-07-23 386/week @ 2024-07-30 277/week @ 2024-08-06

1,160 每月下载量
用于 3 crates

MIT 许可证

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_resourceicon_icoicon_placeholderversioninfowindows_only

重大变更

0.4.2

0.4.1

  • 默认添加 windows_only 功能,以防止与非Windows操作系统链接

0.4.0

  • icon_xxxicon_svgicon_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