由于我对货物设置的无知和大量的文档,我遇到了一些问题。
[cargo.toml文件是当前文件:
[package]
name = "hello"
version = "0.1.0"
authors = ["PC4\\Author"]
[dependencies]
sdl2 = { version = "0.34.1", features = ["bundled", "static-link"] }
已编译SDL2依赖关系,但实际上它使用的是Visual Studio。我真正想做的是在编译板条箱依赖项时使用另一个文件夹中的自定义编译器。
您可以在构建依赖项时指定rust以使用gcc
编译器,只要您已为mingw
正确安装了rust。为确保将锈迹正确配置为mingw
,请使用this thread。请记住,默认情况下,Rust for Windows将配置为MSVC,而不是mingw。
以下步骤最初是在官方rust-sdl2 docs中提及的
完成后,您将需要一个构建脚本来将库链接到依赖项。但是首先,您需要这些库。从官方mingw
]下载libsdl website特定库
现在您需要按照正确的顺序将这些文件与cargo.toml
放在同一文件夹中-
SDL2-devel-2.0.x-mingw.tar.gz\SDL2-2.0.x\i686-w64-mingw32\bin -> gnu-mingw\dll\32 SDL2-devel-2.0.x-mingw.tar.gz\SDL2-2.0.x\x86_64-w64-mingw32\bin -> gnu-mingw\dll\64 SDL2-devel-2.0.x-mingw.tar.gz\SDL2-2.0.x\i686-w64-mingw32\lib -> gnu-mingw\lib\32 SDL2-devel-2.0.x-mingw.tar.gz\SDL2-2.0.x\x86_64-w64-mingw32\lib -> gnu-mingw\lib\64
[
gnu-mingw
应该是与cargo.toml
相同目录的文件夹
现在您需要构建脚本本身,创建一个名为build.rs
的文件,并将其放入[package]
的cargo.toml
中
build =“ build.rs”
有关构建脚本的更多信息,请参见here
这里是脚本-
:这有意省略了MSVC特定的内容。use std::env; use std::path::PathBuf; fn main() { let target = env::var("TARGET").unwrap(); if target.contains("pc-windows") { let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); let mut lib_dir = manifest_dir.clone(); let mut dll_dir = manifest_dir.clone(); lib_dir.push("gnu-mingw"); dll_dir.push("gnu-mingw"); lib_dir.push("lib"); dll_dir.push("dll"); if target.contains("x86_64") { lib_dir.push("64"); dll_dir.push("64"); } else { lib_dir.push("32"); dll_dir.push("32"); } println!("cargo:rustc-link-search=all={}", lib_dir.display()); for entry in std::fs::read_dir(dll_dir).expect("Can't read DLL dir") { let entry_path = entry.expect("Invalid fs entry").path(); let file_name_result = entry_path.file_name(); let mut new_file_path = manifest_dir.clone(); if let Some(file_name) = file_name_result { let file_name = file_name.to_str().unwrap(); if file_name.ends_with(".dll") { new_file_path.push(file_name); std::fs::copy(&entry_path, new_file_path.as_path()).expect("Can't copy from DLL dir"); } } } } }
注
现在在[build]
中的构建配置中也称为cargo.toml
,您需要放置-
target =“ x86_64-pc-windows-gnu”
可在cargo build docs中找到可用目标的列表
有关构建配置的更多信息,请参见config docs