use std::{env, fs, path::PathBuf}; use anyhow::Result; use fs_extra::{copy_items, dir::CopyOptions}; fn main() -> Result<()> { let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?); let source_dir = manifest_dir.join("res"); let out_dir = PathBuf::from(env::var("OUT_DIR")?); let resource_dir = out_dir.join("res"); let mut copy_options = CopyOptions::new(); copy_options.overwrite = true; println!("cargo:rerun-if-changed={}", source_dir.display()); if resource_dir.exists() { fs::remove_dir_all(&resource_dir)?; } if source_dir.exists() { let items = fs::read_dir(&source_dir)? .map(|entry| entry.map(|entry| entry.path())) .collect::, _>>()?; fs::create_dir_all(&resource_dir)?; copy_items(&items, &resource_dir, ©_options)?; } println!("cargo:rustc-env=RESOURCE_DIR={}", resource_dir.display()); Ok(()) }