# Makefile # Makefile: Obsah nalezen porůznu na webu a upraven. (říjen 2010) # http://kvik.sh.cvut.cz/~fidlej/cecko/makefile/referat.html (Ivo Danihelka) # http://dce.felk.cvut.cz/por/cv1/#id2510407 # http://www-kiv.zcu.cz/~herout/html_sbo/make/toc.htm (Jan Valášek) # http://www.fit.vutbr.cz/~martinek/clang/make.html (David Martinek) #------------------------------------------------------------------------ # Datum: 15.11.2011 00:09 # Autor: Marek Nožka, nozka <@t> spseol cz # Úloha: #------------------------------------------------------------------------ #cíl: [závislost] [závislost] #příkazy # pro každý radek se spouští nový shell #cd neco; ./neco # #Automatické proměnné #$@ jméno cíle #$< jméno první závislosti #$? jména závislostí, které jsou novější než cíl #$^ jména všech závislostí oddělená mezerami # # Příklad implicitního pravidla # %.o: %.c # $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< #------------------------------------------------------------------------ #Funkce pro zpracování textu # #Volají se podobně jako proměnné #$(funkce argumenty) # #$(subst from,to,text) substituce #$(patsubst pattern,replacement,text) # % v pattern představuje lib. posloupnost znaků # % v replacement odpovídá této množině # # př.: $(patsubst %.c,%.o,main.c bar.c) #$(var:pattern=replacement) # je ekvivalentní #$(patsubst pattern,replacement,$(var)) # př.: CLASSES = $(SOURCES:.java=.class) # #$(wildcard pattern) # názvy souborů odpovídají pattern, jako v shellu # př.: SOURCES = $(wildcard *.java) #------------------------------------------------------------------------ # Užitečné přepínače # #-f soubor # použije se `soubor` namísto Makefile #-n # nevykonává, jen vypisuje průběh #-p # současně vypíše kompletní nastavení proměnných, # implicitních pravidel, ... #------------------------------------------------------------------------ # ## překladač CC=mcu8051ide ## volby překladače CFLAGS=--nocolor --compile #CPPFLAGS= .PHONY: all build clean again autoexe # všechna *.c zavisi na *.h #OBJ=soubor1.o soubor2.o souborN.o #HEAD=soubor1.h soubor2.h souborN.h #${OBJ}: ${HEAD} # hromadné nastavení závislostí, žádná akce # #$(program): $(program).c # $(CC) $(CFLAGS) -o $(program) $(program).c #hello:hello.c helo.h # gcc -Wall -o hello hello.c ############################################### UISP=sudo uisp -d89 -dprog=stk200 -dno-poll AVRDUDE=sudo avrdude -c usbasp -p s52 %.hex: %.asm $(CC) $(CFLAGS) $< #EXE= ## Vloží proměnnou EXE -include exe.list ############################################### install: *.hex @H=$$(ls -t *.hex | head -n 1);\ echo "I installing $$H"; \ { $(UISP) --erase && $(UISP) --upload if=$$H; } || $(AVRDUDE) -U $$H buildall: $(EXE) again: clean build all: build clean: rm -f ./*.hex ./*.bin ./*.lst ./*.adf cleanall: clean rm -f ./*~ ./exe.list ############################################### ## Generování proměnné EXE autoexe: @LIST="EXE=";\ for i in $$(ls *.asm);do LIST="$$LIST $$(basename $$i .asm).hex"; done;\ echo $$LIST | tee exe.list;