#lang racket (require racket-makefile) ;; A makefile body is ordinary Racket. Target names that are expressions are ;; evaluated while the makefile is registered, so a loop can generate targets. (makefile 'stuff (define sources '("foo.c" "bar.c" "baz.c")) (define objects (for/list ([src sources]) (define obj (path-replace-extension src #".o")) (target obj (deps src) (run `(cc -c $< -o $target))) obj)) (default-target 'all) (phony 'all 'clean) (target 'all (deps objects)) (target 'clean (apply rm-f objects)))