5个不稳定版本
使用旧的Rust 2015
0.3.0 | 2017年8月1日 |
---|---|
0.2.2 | 2017年7月30日 |
0.2.1 | 2017年7月30日 |
0.2.0 | 2017年7月14日 |
0.1.0 | 2017年3月17日 |
#548 in 构建工具
30次每月下载
17KB
220 行
depgraph
Makefile风格的本地构建,用于build.rs。检查输出和输入文件的修改时间,如果有输入文件更改,则运行操作。
示例
此示例在汇编文件更改时使用yasm从汇编文件构建对象文件。
extern crate depgraph;
use std::path::Path;
use std::{fs, env};
use std::process::Command;
fn build_assembly(out: &Path, deps: &[&Path]) -> Result<(), String> {
// Make sure the folder we're going to output to exists.
let out_dir = out.parent().unwrap();
fs::create_dir_all(out_dir).unwrap();
// Run the command with correct argument order
Command::new("yasm").args(&["-f", "elf64", "-o"]).arg(out).args(deps)
.status().unwrap();
// Everything went ok so we return Ok(()). Instead of panicking, we could
// have returned an error message and handled it in main.
Ok(())
}
fn main() {
// Get the directory we should put files in.
let out_dir = env::var("OUT_DIR").unwrap();
let out_dir = Path::new(&out_dir);
// Create the graph builder
let graph = depgraph::DepGraphBuilder::new()
// Add a rule to build an object file from an asm file using the build
// script in `build_assembly`.
.add_rule(out_dir.join("out/path/file.o"),
&[Path::new("src/input_file.asm")],
build_assembly)
// Build the graph, internally this checks for cyclic dependencies.
.build().unwrap();
// Run the necessary build scripts in the correct order.
graph.make(depgraph::MakeParams::None).unwrap();
}
待办事项
- 保留依赖顺序
- 自动化测试
- 更多泛型(不确定这会添加什么)
- 优化(再次不确定这会添加什么)
依赖
~650KB
~15K SLoC