Skip to content

Latest commit

 

History

History
108 lines (71 loc) · 2.65 KB

File metadata and controls

108 lines (71 loc) · 2.65 KB

make

Coders School

Pliki Makefile

Struktura pliku Makefile

VARIABLE = value

targetA: dependencyA1 dependencyA2
[TAB] command $(VARIABLE)

targetB: dependencyB1
[TAB] command

Przykład - generowanie prezentacji w LaTeX

TEX = 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)

Kompilacja w C++

Pamiętacie fazy kompilacji?

SOURCES=$(wildcard src/*.cpp)
OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES))

main: $(OBJECTS)
	g++ $^ -o $@

$(OBJECTS): src/%.o : src/%.cpp src/%.hpp
	g++ -c $< -o $@

Zmienne pamiętające kontekst

  • $@ - 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

Zadanie

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ą make i uruchom.

Zaklęcie kompilacji

g++ -std=c++17 -Wall -Werror -Wextra -pedantic *.cpp -o greeter
./greeter

Polecenie make

  • 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ę

Q&A

Linki

cpp-polska.pl