1// Compiler template 2local CCompiler = { 3 cFlags: [], 4 out: 'a.out', 5 local flags_str = std.join(' ', self.cFlags), 6 local files_str = std.join(' ', self.files), 7 cmd: '%s %s %s -o %s' % [self.compiler, flags_str, files_str, self.out], 8}; 9 10// GCC specialization 11local Gcc = CCompiler { compiler: 'gcc' }; 12 13// Another specialization 14local Clang = CCompiler { compiler: 'clang' }; 15 16// Mixins - append flags 17local Opt = { cFlags: super.cFlags + ['-O3', '-DNDEBUG'] }; 18local Dbg = { cFlags: super.cFlags + ['-g'] }; 19 20// Output: 21{ 22 targets: [ 23 Gcc { files: ['a.c', 'b.c'] }, 24 Clang { files: ['test.c'], out: 'test' }, 25 Clang + Opt { files: ['test2.c'], out: 'test2' }, 26 Gcc + Opt + Dbg { files: ['foo.c', 'bar.c'], out: 'baz' }, 27 ], 28} 29