Make
Make je utilita pro automatické překlady programů.
Syntaxe
$@- plné jméno cíle$<- jméno první závislostí$?- jméno všech závislostí novějších než cíl$^- jméno všech závislostí oddělené mezerami$$- znak$
Pomocí programu find rekurzivně nalezne všechny soubory *.java v
adresáři src
JAVA_FILES = $(shell find src/ -type f -name '*.java')
Vytvoří nový seznam souborů z JAVA_FILES, který bude umístěný jinde a bude mít příponu class
CLASS_FILES = $(JAVA_FILES:src/%.java=out/%.class)
Příklady Makefile
pro všechny soubory *.ui v adresáři forms spustí příkaz pyuic4 <soubor ui> -o <pythonovský_soubor_ui_*.py>
PYUIC = pyuic4
FORMS_DIR = forms
UI_FILES = $(wildcard $(FORMS_DIR) /*.ui)
COMPILED_UI = $(UI_FILES:$(FORMS_DIR)/%.ui=$(FORMS_DIR)/ui_%.py)
all: compile
compile: $(COMPILED_UI)
$(FORMS_DIR)/ui_%.py : $(FORMS_DIR)/%.ui
$(PYUIC) $< -o $@
makefile pro překlad cpp souborů
EXEC = program
CC = g++
CFLAGS_COMMON = -std=c++0x -pedantic -Wall -Wextra $(ef)
CFLAGS_DEBUG = -g3 -D DEBUG $(CFLAGS_COMMON)
CFLAGS_RUN = -s -O3 -D NDEBUG $(CFLAGS_COMMON)
LIBS = -lm
FILES = $(wildcard *.cpp)
OBJECTS = $(FILES:.cpp=.o)
RM = rm -f
# oznaceni navesti - tzv. falesnych cilu, ktere nemaji vyznam "cilovy soubor"
.PHONY: dependencies clean-exec clean-objects clean pack
all: run
dependencies:
$(CC) -MM *.cpp > dependencies.list
-include dependencies.list
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@
debug: CFLAGS = $(CFLAGS_DEBUG)
debug: compile
run: CFLAGS = $(CFLAGS_RUN)
run: compile
compile: dependencies
compile: $(OBJECTS)
$(CC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(EXEC)
clean-exec:
$(RM) $(EXEC_SERVER) $(EXEC_CLIENT)
clean-objects:
$(RM) *.o
clean-dep:
$(RM) dependencies.list
clean: clean-exec clean-objects clean-dep
pack:
tar -czf ``<package>`{=html}`.tar.gz Makefile README *.cpp *.h
makefile, který převede všechny dia soubory do pdf (vyžaduje programy Dia a Inkscape)
.PHONY: all clean-svg clean-pdf clean
RM= rm -f
DIA_FILES=$(wildcard *.dia)
DIA_SVG_FILES=$(DIA_FILES:.dia=.svg)
DIA_PDF_FILES=$(DIA_SVG_FILES:.svg=.pdf)
all: export-pdf-from-dia
%.svg: %.dia
dia --nosplash --export="$@" "$<"
%.pdf: %.svg
inkscape --export-pdf="$@" "$<"
export-pdf-from-dia: $(DIA_PDF_FILES)
svg: $(DIA_SVG_FILES)
pdf: $(DIA_PDF_FILES)
clean-svg:
$(RM) *.svg
clean-pdf:
$(RM) *.pdf
clean: clean-svg clean-pdf
makefile pro zabalení všech souborů spravovaných gitem a adresáře .git
do zip souboru s dnešním datem
PROGRAM_NAME = program
.PHONY: pack clean
pack:
git ls-files | xargs zip -r $(PROGRAM_NAME)_$$(date "+%F").zip .git/
clean:
$(RM) *.zip