如何修改rustnetconf_yang读取yang-models目录的路径?
解决rustnetconf-yang读取YANG文件路径的问题
方法1:通过环境变量指定路径(无需额外脚本)
rustnetconf-yang默认从自身依赖的CARGO_MANIFEST_DIR读取YANG文件,你可以通过环境变量强制指定项目内的目录:
- 临时构建时直接传递变量:
YANG_MODELS_DIR=~/myproject/yang-models cargo build - 若想固定配置,在项目根目录的
Cargo.toml中添加:
注:部分版本的rustnetconf-yang可能使用[build] rustflags = ["--cfg", 'yang_models_path="~/myproject/yang-models"']YANG_PATH作为环境变量名,需核对对应版本的文档。
方法2:编写build.rs脚本(更灵活的路径控制)
如果需要动态处理路径(比如适配不同环境),编写build.rs是更可靠的方案:
- 在项目根目录创建
build.rs文件,内容示例:use std::env; use std::path::Path; fn main() { // 用项目根目录拼接yang-models路径,避免硬编码的绝对路径问题 let project_root = env::var("CARGO_MANIFEST_DIR").unwrap(); let yang_dir = Path::new(&project_root).join("yang-models") .canonicalize().expect("Failed to resolve yang-models path"); // 设置环境变量供rustnetconf-yang读取 env::set_var("YANG_MODELS_DIR", yang_dir.to_str().unwrap()); // 告诉Cargo:如果yang-models目录下文件变动,自动重新构建 println!("cargo:rerun-if-changed=yang-models"); } - 在
Cargo.toml中声明构建脚本:[package] # 保留原有配置,新增以下行 build = "build.rs"
关键注意事项
- 优先使用项目根目录拼接路径(即
CARGO_MANIFEST_DIR+yang-models),而非硬编码~/myproject,避免项目移动后路径失效。 - 不同版本的rustnetconf-yang配置逻辑可能有差异,请核对你使用的crate版本对应的文档细节。
内容的提问来源于stack exchange,提问作者Marc Le Bihan
相关产品推荐
相关产品推荐

