// Compiler template local CCompiler = { cFlags: [], out: "a.out", local flags_str = std.join(" ", self.cFlags), local files_str = std.join(" ", self.files), cmd: "%s %s %s -o %s" % [self.compiler, flags_str, files_str, self.out], }; // GCC specialization local Gcc = CCompiler { compiler: "gcc" }; // Another specialization local Clang = CCompiler { compiler: "clang" }; // Mixins - append flags local Opt = { cFlags: super.cFlags + ["-O3", "-DNDEBUG"] }; local Dbg = { cFlags: super.cFlags + ["-g"] }; // Output: { targets: [ Gcc { files: ["a.c", "b.c"] }, Clang { files: ["test.c"], out: "test" }, Clang + Opt { files: ["test2.c"], out: "test2" }, Gcc + Opt + Dbg { files: ["foo.c", "bar.c"], out: "baz" }, ] }