-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path16.make.qmd
More file actions
105 lines (77 loc) · 2.95 KB
/
16.make.qmd
File metadata and controls
105 lines (77 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
---
title: "Make"
author: "Lev Kovalenko"
format:
revealjs:
theme: dark
self-contained: true
echo: true
source: true
---
## Makefile
> `Из чего делаем? (реквизиты) ---> Как делаем? (команды) ---> Что делаем? (цели)`
```make
<цели>: <реквизиты>
<команда #1>
...
<команда #n>
```
:::{.notes}
make — утилита, автоматизирующая процесс преобразования файлов из одной формы в другую. Чаще всего это компиляция исходного кода в объектные файлы и последующая компоновка в исполняемые файлы или библиотеки.
Утилита использует специальные make-файлы, в которых указаны зависимости файлов друг от друга и правила для их удовлетворения. На основе информации о времени последнего изменения каждого файла make определяет и запускает необходимые программы.
Сам скрипт состоит из набора правил, которые в свою очередь описываются:
1) целями (то, что данное правило делает);
2) реквизитами (то, что необходимо для выполнения правила и получения целей);
3) командами (выполняющими данные преобразования).
:::
## Примеры {.scrollable}
Virtual Environment Management
```make
create_env:
python3.10 -m venv .venv
activate_env: create_env
activate ./.venv/bin/activate
```
Dependency Management
```make
update_deps:
@poetry update
deps_install_no_dev: update_deps
@poetry install --no-dev
deps_install: update_deps
@poetry install
deps_export: update_deps
@poetry export --without-hashes --output requirements.txt
```
Code Quality
```make
check_flake8:
@poetry run flake8 ./fundom --count --show-source --statistics
check_isort:
@poetry run isort **/*.py --check-only
test:
@poetry run pytest
check: check_flake8 check_isort test
@echo "All checks are finished!"
setup_pre_commit:
@pre-commit install
```
## Pros&Cons {.scrollable}
:::: {.columns }
::: {.column width="50%" }
**Pros**
- Не зависит от языка
- DAG на основе файлов
- Правила рядом с кодом
- Паралельное выполнение
:::
::: {.column width="50%"}
**Cons**
- Не тривиальный синтаксис
- Сложное разбиение на модули
- Ручная параметризация
- Нет виртуальных окружений
- Нет ограничений на ресурсы
- Нет распределенных вычеслений
:::
::::