// 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' }, ], }