place example makefiles
This commit is contained in:
parent
a9f7fd7f75
commit
e59538a3bd
13
slides/makefiles/examples/fort_1
Normal file
13
slides/makefiles/examples/fort_1
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
forts/big_fort.txt: forts/short.txt forts/long.txt
|
||||||
|
cat forts/short.txt forts/long.txt > forts/big_fort.txt
|
||||||
|
|
||||||
|
forts/:
|
||||||
|
mkdir forts
|
||||||
|
|
||||||
|
forts/short.txt: forts/
|
||||||
|
fortune -s > forts/short.txt
|
||||||
|
|
||||||
|
forts/long.txt: forts/
|
||||||
|
fortune -l > forts/long.txt
|
||||||
|
|
15
slides/makefiles/examples/fort_2
Normal file
15
slides/makefiles/examples/fort_2
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
forts/big_fort.txt: forts/short.txt forts/long.txt
|
||||||
|
cat $^ > $@
|
||||||
|
|
||||||
|
forts/:
|
||||||
|
mkdir $@
|
||||||
|
|
||||||
|
forts/short.txt: forts/
|
||||||
|
fortune -s > $@
|
||||||
|
|
||||||
|
forts/long.txt: forts/
|
||||||
|
fortune -l > $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf forts
|
@ -12,13 +12,86 @@ colortheme:
|
|||||||
|
|
||||||
# Intro
|
# Intro
|
||||||
|
|
||||||
|
The fundamental problem:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git submodule update --init soundscape
|
||||||
|
cargo build --release
|
||||||
|
install -pm755 target/release/tap /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
You can't type this after every test.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## First Solution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/sh
|
||||||
|
git submodule update --init soundscape
|
||||||
|
cargo build --release
|
||||||
|
install -pm755 target/release/tap /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
At this point, every test takes 10 minutes.
|
||||||
|
|
||||||
|
## Second Solution
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/sh
|
||||||
|
[ -f soundscape/.git ] || git submodule update --init soundscape
|
||||||
|
[ -f target/release/tap ] || cargo build --release
|
||||||
|
[ -f target/release/tap ] || \
|
||||||
|
install -pm755 target/release/tap /usr/local/bin/
|
||||||
|
```
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
# Makefile Solutions
|
||||||
|
|
||||||
- input, process, output.
|
- input, process, output.
|
||||||
- automatic idempotence
|
- automatic idempotence
|
||||||
|
|
||||||
|
```bash
|
||||||
|
INSTALL_DIR = /usr/local/bin
|
||||||
|
|
||||||
|
soundscape/.git:
|
||||||
|
git submodule update --init soundscape
|
||||||
|
|
||||||
|
/usr/local/bin/tap: target/release/tap
|
||||||
|
install -pm755 target/release/tap $(INSTALL_DIR)
|
||||||
|
|
||||||
|
target/release/tap: src soundscape/.git
|
||||||
|
cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
# Basic
|
||||||
|
|
||||||
- *Gotcha*: directories
|
- *Gotcha*: directories
|
||||||
- This, that, and these
|
- This, that, and these
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
## Repetition, Repetition, Repetition
|
||||||
|
|
||||||
|
```make
|
||||||
|
.PHONY: output
|
||||||
|
output: release/index.html
|
||||||
|
|
||||||
|
release/: backups.zip
|
||||||
|
mkdir $@
|
||||||
|
|
||||||
|
release/index.html: index.html release/
|
||||||
|
cp $< $@
|
||||||
|
|
||||||
|
index.html: backups.zip
|
||||||
|
unzip $<
|
||||||
|
```
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
|
|
||||||
- From your shell.
|
- From your shell.
|
||||||
@ -59,7 +132,6 @@ colortheme:
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
|
||||||
# Bling: make2graph
|
# Bling: make2graph
|
||||||
|
|
||||||
- *Gotcha*: completely outdated.
|
- *Gotcha*: completely outdated.
|
||||||
@ -75,8 +147,8 @@ colortheme:
|
|||||||
|
|
||||||
# Special Commands
|
# Special Commands
|
||||||
|
|
||||||
- dirname
|
- dir
|
||||||
- `DIR = test -d $(dirname $@) || mkdir $(dirname $@)`
|
- `DIR = test -d $(dir $@) || mkdir $(dir $@)`
|
||||||
- patsubst
|
- patsubst
|
||||||
- Wildcards (or not?)
|
- Wildcards (or not?)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user