VARIABLE = value
targetA: dependencyA1 dependencyA2
[TAB] command $(VARIABLE)
targetB: dependencyB1
[TAB] commandTEX = pdflatex -shell-escape -interaction=nonstopmode -file-line-error
MAKE = make
CODE_DIR = src
.PHONY: all view
all: calculator pdf
view:
evince ContractProgramming.pdf
pdf: ContractProgramming.tex
$(TEX) ContractProgramming.tex
calculator:
$(MAKE) -C $(CODE_DIR)SOURCES=$(wildcard src/*.cpp)
OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES))
main: $(OBJECTS)
g++ $^ -o $@
$(OBJECTS): src/%.o : src/%.cpp src/%.hpp
g++ -c $< -o $@-
$@- nazwa pliku targetu w aktualnie uruchomionej regule -
$<- nazwa pierwszej zależności -
$^- lista wszystkich zależności (zawiera ewentualne duplikaty) -
$?- lista wszystkich zależności, które są nowsze niż target
W katalogu greeter znajdziesz malutki program. Zapoznaj się z jego kodem.
- Skompiluj program z linii komend i uruchom go.
- Napisz prosty Makefile dla tego programu. Zbuduj go za pomocą
makei uruchom.
g++ -std=c++17 -Wall -Werror -Wextra -pedantic *.cpp -o greeter
./greeter- domyślnie szuka w bieżącym katalogu pliku Makefile
- automatyzuje czynności poprzez wykonywanie receptur zapisanych w plikach Makefile
- domyślnie wykonuje pierwszą recepturę
- pozwala na warunkowe wykonywanie czynności
- pozwala definiować wiele zależności
- domyślnie uwzględnia daty modyfikacji zależności i na tej podstawie podejmuje decyzję, czy wykonać daną recepturę