TSC=./node_modules/.bin/tsc SASS=./node_modules/.bin/sass MARKUP_FILES=$(wildcard src/index.hbs src/partials/*hbs) STYLE_FILES=$(wildcard src/index.sass src/styles/*.sass) SCRIPT_FILES=$(wildcard src/index.ts src/scripts/*.ts) IMAGES=$(wildcard src/index.ts src/media/*.jpeg) VIDEOS=$(wildcard src/index.ts src/media/*.mp4) # ... .DEFAULT_TARGET: all all: build markup scripts styles media build: mkdir -p $@ touch $@ node_modules: package.json npm install touch $@ markup: build/index.html build/index.html: $(MARKUP_FILES) hbs src/index.hbs --partial 'src/partials/*.hbs' -o ./build scripts: build/index.js build:index.js: tsconfig.json $(SCRIPT_FILES) node_modules $(TSC) --build $< styles: build/index.css build/index.css: $(STYLE_FILES) node_modules $(SASS) $< $@ media: images videos images: $(IMAGES) for image in $^; do \ imagemin $$image > build/media/$$image ; \ done touch $@ videos: $(VIDEOS) for video in $^; do \ HandBrakeCLI -i $$video -o build/media/$$video ; \ done touch $@ .PHONY: clean clean: rm -Rf ./build/*