open Goaljobs let rec goal all () = require (built "program" ["main.c"; "utils.c"]) (* Goal: build the final program from source files. *) and built program sources = target (more_recent [program] sources); List.iter (fun s -> require (compiled s)) sources; let objects = List.map (change_file_extension "o") sources in sh "cd $builddir && cc %s -o %s" (String.concat " " objects) program (* Goal: Make sure a C file is compiled (to an object file). *) and compiled c_file = let o_file = change_file_extension "o" c_file in target (more_recent [o_file] [c_file]); require (file_exists c_file); sh "cd $builddir && cc -c %s -o %s" c_file o_file