feat(env): 支持环境变量数组跨平台自动拼接
- 支持在 Lua 中配置数组格式的环境变量(如 PATH),由 Rust 按 OS 自动使用 `;` 或 `:` 拼接 - 保持普通字符串格式环境变量的直接覆盖逻辑 - 新增 `ShimConfig::to_command()` 用于快速创建 Command 对象 - 新增 error.rs 明确错误类型 - 新增 build.rs 优化编译
This commit is contained in:
47
build.rs
Normal file
47
build.rs
Normal file
@@ -0,0 +1,47 @@
|
||||
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=shims.lua");
|
||||
println!("cargo:rustc-env=OUTPUT_DIR={}", output_dir.display());
|
||||
|
||||
// 创建目录
|
||||
let dirs = ["bin", "tools"];
|
||||
for dir in &dirs {
|
||||
let path = output_dir.join(dir);
|
||||
if !path.exists() {
|
||||
fs::create_dir_all(&path).expect(&format!("Failed to create {} directory", dir));
|
||||
println!("Created: {:?}", path);
|
||||
}
|
||||
}
|
||||
|
||||
// 复制文件
|
||||
let source = PathBuf::from(&manifest_dir).join("shims.lua");
|
||||
let destination = output_dir.join("shims.lua");
|
||||
|
||||
if source.exists() {
|
||||
fs::copy(&source, &destination).expect("Failed to copy shims.lua");
|
||||
println!("Copied shims.lua to: {:?}", destination);
|
||||
} else {
|
||||
panic!("shims.lua not found at: {:?}", source);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user