如何配置Rust项目:Windows生成可执行文件,Linux生成共享库?
嘿,这个问题我之前折腾过好一阵子,其实Cargo本身就支持按目标平台条件配置,完全不用写脚本或者手动切换配置文件,就能轻松实现Windows出exe、Linux出共享库的需求!
核心思路
原来的[lib]配置是全局生效的,所以不管哪个平台都会生成共享库(Windows下是.dll,Linux下是.so)。我们要做的就是给不同平台分别指定对应的产物类型:Linux下编译为cdylib,Windows下编译为可执行文件(需要确保你的项目有src/main.rs作为入口)。
具体配置方法
直接修改你的Cargo.toml,用目标平台条件块来覆盖配置:
# 基础库配置,名称统一 [lib] name = "my_project_name" # 仅在Linux平台下,编译为共享库 [target.'cfg(target_os = "linux")'.lib] crate-type = ["cdylib"] # 仅在Windows平台下,编译为可执行文件 [[bin]] name = "my_project_name" path = "src/main.rs" # 让这个bin目标只在Windows平台生效 cfg = { target_os = "windows" }
补充说明
- 代码层面的配合:如果你的可执行文件逻辑是调用库中的代码,只需要在
src/main.rs里写Windows专属的入口即可(用条件编译确保Linux下不会编译这段代码):
#[cfg(target_os = "windows")] fn main() { // 这里写Windows可执行文件的逻辑,比如调用库中的核心函数 my_project_name::run_core_logic(); }
- 验证编译结果:
- Windows环境下执行
cargo build,会在target/debug/下生成my_project_name.exe - Linux环境下执行
cargo build,会在target/debug/下生成libmy_project_name.so - 交叉编译也适用,比如在Linux下编译Windows目标:
cargo build --target x86_64-pc-windows-msvc,同样会输出exe文件
- Windows环境下执行
这种方式完全由Cargo自动处理平台差异,不用手动修改配置,非常省心!
内容的提问来源于stack exchange,提问作者user2551017
相关产品推荐
相关产品推荐

