Uživatelské nástroje

Nástroje pro tento web


navody:make

make

Make je utilita pro automatické překlady programů.

http://www.fit.vutbr.cz/~martinek/clang/make.html - Návod Ing. Davida Martínka

Sntaxe

  • $@ - 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>.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
navody/make.txt · Poslední úprava: 2013/10/05 22:26 autor: jules