45个稳定版本

使用旧的Rust 2015

2.4.3 2024年7月17日
2.4.2 2024年3月6日
2.4.1 2024年1月5日
2.4.0 2023年10月9日
0.1.2 2017年1月31日

#9 in 开发工具

Download history 49245/week @ 2024-05-03 52766/week @ 2024-05-10 52096/week @ 2024-05-17 52596/week @ 2024-05-24 54294/week @ 2024-05-31 49986/week @ 2024-06-07 53141/week @ 2024-06-14 51222/week @ 2024-06-21 52595/week @ 2024-06-28 54736/week @ 2024-07-05 58452/week @ 2024-07-12 60481/week @ 2024-07-19 59743/week @ 2024-07-26 63727/week @ 2024-08-02 68194/week @ 2024-08-09 55686/week @ 2024-08-16

257,529 每月下载量
用于 146 个Crate(直接使用54个)

MIT 许可证

41KB
498

rust-embed-resource TravisCI 构建状态 AppVeyorCI 构建状态 许可证 Crates.io 版本

一个用于以最坚韧的方式处理编译和包含 Windows 资源的 Cargo 构建脚本

文档

快速入门

在您的构建脚本中,假设资源文件名为 checksums.rc

extern crate embed_resource;

fn main() {
    // Compile and link checksums.rc
    embed_resource::compile("checksums.rc", embed_resource::NONE);

    // Or, to select a resource file for each binary separately
    embed_resource::compile_for("assets/poke-a-mango.rc", &["poke-a-mango", "poke-a-mango-installer"], &["VERSION=\"0.5.0\""]);
    embed_resource::compile_for("assets/uninstaller.rc", &["unins001"], embed_resource::NONE);
}

示例:嵌入 Windows 清单

@jpoles1 提供。

以下步骤用于在编译的 rust .exe 文件中嵌入清单。在此示例中,清单将导致最终可执行文件请求管理员权限

  1. 将以下内容添加到您的 cargo.toml
[build-dependencies]
embed-resource = "2.4"
  1. 在项目根目录中,添加一个名为 build.rs 的文件,内容如下
extern crate embed_resource;
fn main() {
    embed_resource::compile("app-name-manifest.rc", embed_resource::NONE);
}
  1. 在项目根目录中,添加一个名为 app-name.manifest.rc 的文件,内容如下
#define RT_MANIFEST 24
1 RT_MANIFEST "app-name.exe.manifest"
  1. 在项目根目录中,添加一个名为 app-name.exe.manifest 的文件,内容如下
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>
  1. 构建您的项目!

错误

如果没有生成 cargo:rerun-if-changed 注解,Cargo 默认会扫描整个构建根目录。由于构建清单的第一步是一个未指定的 C 预处理器步骤,且无法生成类似于 cc -MD 的等效命令,所以我们不会输出该注解。

如果扫描成本过高,或者您有其他生成注解的方法,您可能需要手动指定清单的全非系统依赖列表,因此

println!("cargo:rerun-if-changed=app-name-manifest.rc");
embed_resource::compile("app-name-manifest.rc", embed_resource::NONE);

对于上述示例(参看 #41)。

迁移

2.x

embed_resource::NONE 作为 embed_resource::compile()embed_resource::compile_for() 的最后一个参数添加

致谢

按时间顺序排列

@liigo -- 坚持追问并调查我在失败的地方

@mzji -- MSVC 实验鼠

@TheCatPlusPlus -- 知识和提供第一次清单嵌入代码的迭代

@azyobuzin -- 提供代码以查找 RC.EXE 可能隐藏的地方

@retep998 -- 修复 MSVC 支持

@SonnyX -- Windows 跨平台编译支持和测试

@MSxDOS -- 发现并供应 RC.EXE 其神秘的头文件包含路径

@roblabla -- 使用 LLVM-RC 进行跨编译到 Windows MSVC

特别感谢

所有在 Patreon 上支持进一步开发的人,尤其是

  • ThePhD
  • Embark Studios
  • Lars Strojny
  • EvModder

依赖项

~0.6–11MB
~62K SLoC