Crate to only redo jobs when necessary?

I have a bunch of tasks that I want to execute where they have dependencies on one another. When a task completes I want to save the result to disk, and when I rerun the program later if the data the task would produce is already on disk it shouldn't execute the task again. Basically looking for make as a library. I see crates for specifying a dependency graph, and crates for memoizing, but not this particular combo. Am I maybe just getting the search terms wrong? I'm imagining you'd implement tasks by having one trait method specifying the work and another that determines whether the is considered 'done'. Anything like this already around?