You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下用Cargo为Windows交叉编译时,如何指定带架构标识的输出文件名

实现Windows x86架构编译输出自定义文件名的方法

以下是几种可行的解决方案,按需选择即可:

方案一:编译后手动重命名(最简单)

直接在编译命令后追加重命名操作,一步完成编译与文件名修改:

cargo build --release --lib --target i686-pc-windows-gnu && mv target/i686-pc-windows-gnu/release/my_project.dll target/i686-pc-windows-gnu/release/my_project_x86.dll

无需修改任何配置文件,适合临时需求或简单场景。

方案二:通过Cargo.toml配置目标专属输出名

在项目根目录的Cargo.toml中添加针对i686-pc-windows-gnu的编译参数,让Cargo直接输出指定名称的DLL:

[package]
# 保留你原有的package配置内容

[target.i686-pc-windows-gnu]
# 给GNU链接器传递参数,指定输出文件名
rustc-flags = "-C linker-flags=-Wl,--output=my_project_x86.dll"

配置完成后,再次执行x86架构的编译命令,输出文件就会自动变为my_project_x86.dll。

方案三:用build.rs脚本自动化处理

在项目根目录创建build.rs文件,添加以下代码,让编译流程自动完成文件名修改:

use std::env;
use std::fs;
use std::path::PathBuf;

fn main() {
    let target = env::var("TARGET").expect("Failed to get target");
    let out_dir = PathBuf::from(env::var("OUT_DIR").expect("Failed to get out dir"));
    
    // 仅对Windows x86目标执行重命名
    if target == "i686-pc-windows-gnu" {
        // 定位编译后的DLL文件路径
        let src_dll = out_dir.parent().unwrap().parent().unwrap().join("my_project.dll");
        let dest_dll = out_dir.parent().unwrap().parent().unwrap().join("my_project_x86.dll");
        
        if src_dll.exists() {
            fs::rename(src_dll, dest_dll).expect("Failed to rename DLL");
        }
    }
}

然后在Cargo.toml中启用这个build脚本:

[package]
# 保留原有配置,添加以下行
build = "build.rs"

此后每次编译x86目标时,脚本会自动将输出的DLL重命名为指定名称,适合需要全自动化的场景。

内容的提问来源于stack exchange,提问作者codewalker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:20:24