Got make?

I'm @robashton

Things I don't like

AngularJS,Rails,Ruby,C#,Java,JavaScript,Ember,Node,Semicolons, Object orientated code, Design patterns, Procedural code, Imperative code, Dynamic languages, Bad coffee,Visual Studio,Emacs, Making slide decks, MacOS,Wearing clothes,Wearing shoes,Exercise,Software development

Things I do like

???

Some context

Make (GNU)

Make

  • As old as the hills
  • Full of weirdness
  • FUN!

Demo

(Variable Expansion)

We learned

  • Make is not procedural
  • Recursive Variables are pretty lazy
  • Simply expanded variables are not

Targets, Pre-reqs, Recipes

Demo

(A simple recipe)

We learned

  • Targets are (usually) actual physical outputs
  • Pre-requisites can be files or other targets
  • Recipes are just scripts that do a->b

Pattern Rules

Demo

(Pattern rules)

We learned

  • Pattern rules are just subsitutions with %
  • Automatic variables are available to recipes
    • $@ = Filename of the target causing this to run
    • $< = Name of the first pre-requisite
    • $^ = All of the pre-requisites separated by spaces
    • .... a dozen more of these

Built in functions

Demo

(Wildcards)

We learned

  • Lists of inputs can be generated with (wildcard  ...)
  • Lists of outputs can be generated with (patsubst ...)
  • Good when combined with pattern rules(!!)

Putting it all together

Demo

(Building the web)

We learned

  • The structure of a Makefile
  • Touching placeholder files
  • Automatic parallelism! (on sensible OSs)

Things to consider

  • Self executing make "per widget"
  • Stylus dependencies (not dealt with in this example)
  • Vanilla JS (existing JS files currently ignored)
  • widgets -> node_modules 
  • browserify/etc

Re-use

Demo

(Bootstrapping Makefile)

We learned

  • wget is your friend
  • Variable exports
  • .DEFAULT_GOAL
  • PROJECT CONVENTIONS FOR THE WIN

Don't do this

all: build-js build-css

build-js: 
  browserify -t brfs src/app.js > site/app.js

build-css:
  stylus src/style.styl > site/style.css

etc:
  blah


.PHONY build-js build-css etc

Build systems !== Task Runners

Did you mean...

npm scripts

Build Complete

(I'm probably being glared at for going too slow so I expect we don't have time for questions but I am totes hanging out on a beanbag somewhere and will be drinking beer later if you want to tell me I am wrong about everything or I did "Make" wrong or you're an angular fanboy and you want to organise an angry mob)

@robashton

Made with Slides.com