place example makefiles
This commit is contained in:
		
							
								
								
									
										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?) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user