29 lines
		
	
	
		
			748 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			748 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// 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" },
 | 
						|
  ]
 | 
						|
}
 |