use std::env; use std::fs; use std::path::PathBuf; fn main() { // CARGO_MANIFEST_DIR -> 项目根目录路径 // CARGO_TARGET_DIR -> 用户自定义了 target 目录,使用该变量 let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); let target_dir = env::var("CARGO_TARGET_DIR") .ok() .map(PathBuf::from) .unwrap_or_else(|| PathBuf::from(&manifest_dir).join("target")); // PROFILE -> 获取当前构建配置文件(debug/release) let profile = env::var("PROFILE").unwrap(); // let output_dir = target_dir.join(&profile); // 在 target/debug/ 或 target/release/ 下创建 bin2 目录 let output_dir = target_dir.join(&profile).join("bin2"); // cargo:rerun-if-changed -> 当指定文件变化时,重新运行 xxx println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=rshim.lua"); println!("cargo:rustc-env=OUTPUT_DIR={}", output_dir.display()); // 创建目录 let subdirs = ["bin", "tools"]; for subdir in &subdirs { let path = output_dir.join(subdir); if !path.exists() { fs::create_dir_all(&path).expect(&format!("Failed to create {} directory", subdir)); println!("Created: {:?}", path); } } // 复制文件 let source = PathBuf::from(&manifest_dir).join("mimic.lua"); let destination = output_dir.join("rshim.lua"); if source.exists() { fs::copy(&source, &destination).expect("Failed to copy mimic.lua"); println!("Copied mimic.lua to: {:?}", destination); } else { panic!("mimic.lua not found at: {:?}", source); } }