#build #makefile #graph #dependencies #make

build depgraph

一个管理相互依赖的文件并在必要时重建它们的库,类似于makefile

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次每月下载

MIT/Apache

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();
}

待办事项

  1. 保留依赖顺序
  2. 自动化测试
  3. 更多泛型(不确定这会添加什么)
  4. 优化(再次不确定这会添加什么)

依赖

~650KB
~15K SLoC