4 个版本
0.1.3 | 2023年12月2日 |
---|---|
0.1.2 | 2023年3月22日 |
0.1.1 | 2023年2月3日 |
0.1.0 | 2022年9月20日 |
#203 在 构建工具
26KB
703 代码行
gpr-rust
Gpr-Rust 是 gpr 的 Rust 绑定。其目标是提供一种简单的方法将 Ada 代码集成到 Rust 构建过程中。它允许通过解析项目并调用 gprbuild 提供所有必需信息来选择和构建一个 GNAT 项目文件,并将结果库链接起来。
依赖项
要构建此项目,需要安装一个可工作的 Alire 安装。您可以从这里下载 Alire。构建脚本将自动下载所需的依赖项。构建此 crate 所使用的工具链和依赖项仅适用于 crates 构建过程。对于使用此 crate 构建的任何 Ada 项目,都需要提供适当的工具链。
此外,还需要以下原生 C 库
libgmp-dev
libssl-dev
用法
此库旨在在构建脚本中使用。基本过程包括三个步骤。
- 加载项目
let project = gpr::Project::load(Path::new("/path/to/project.gpr")).unwrap();
- 构建项目
let output = Command::new("gprbuild")
.args(project.gprbuild_args().unwrap())
.stderr(Stdio::inherit())
.output()
.unwrap();
if !output.status.success() {
panic!();
}
- 向 cargo 提供所需的链接器标志
println!(
"cargo:rustc-link-search{}",
project.library_dir().unwrap().to_str().unwrap()
);
println!(
"cargo:rustc-link-lib={}={}",
project.library_kind().unwrap(),
project.library_name().unwrap()
);
- 此外,还可以告诉 cargo,Ada 代码的变化也应该触发重新运行
for dir in project.source_dirs().unwrap() {
println!(
"cargo:rerun-if-changed={}", dir.as_str()
);
}
Gpr-Rust 不需要太多配置,大部分代码都是样板代码。如果需要额外的选项来构建 Ada 项目,可以将这些选项作为参数添加到 gprbuild
命令中。
示例项目位于 examples/ada_hello/build.rs
。可以通过运行以下命令进行测试
cd examples/ada_hello
LD_LIBRARY_PATH=ada_hello/lib cargo run
依赖项
~0.8–2.7MB
~63K SLoC