$(RAW_DATA):
python3 $(SCRIPTS) extract > $(RAW_DATA)
# Правило трансформации данных
$(TRANSFORMED_DATA): $(RAW_DATA)
python3 $(SCRIPTS) transform $(RAW_DATA) > $(TRANSFORMED_DATA)
# Правило загрузки данных
$(LOADED_DATA): $(TRANSFORMED_DATA)
python3 $(SCRIPTS) load $(TRANSFORMED_DATA) > $(LOADED_DATA)
# Очистка временных файлов
clean:
rm -f $(RAW_DATA) $(TRANSFORMED_DATA) $(LOADED_DATA)
.PHONY: all clean
```
В этом Makefile определены этапы ETL-процесса: извлечение данных из источника, их трансформация и загрузка в конечную базу данных. Make автоматически определяет зависимости между этапами и выполняет их в правильном порядке.
### Автоматизация развертывания
Для компаний, занимающихся разработкой программного обеспечения или предоставляющих ИТ-услуги, важным аспектом является развертывание приложений и обновлений. Make может использоваться для автоматизации процесса развертывания, гарантируя, что все компоненты приложения корректно установлены и настроены.
#### Пример Makefile для автоматизации развертывания
```makefile
# Переменные
DEPLOY_DIR = /var/www/myapp
SOURCES = src/ config/ scripts/
SSH_HOST = user@server.com
REPOSITORY = git@github.com:username/myapp.git
# Основная цель
deploy: build upload restart
# Правило сборки приложения
build:
cd src && make build
# Правило загрузки файлов на сервер
upload:
rsync -avz $(SOURCES) $(SSH_HOST):$(DEPLOY_DIR)/
# Правило перезапуска приложения на сервере
restart:
ssh $(SSH_HOST) 'systemctl restart myapp.service'
# Очистка локальных сборок
clean:
cd src && make clean
.PHONY: deploy build upload restart clean
```
Этот Makefile определяет последовательность действий для развертывания приложения: сборка, загрузка на сервер с помощью rsync и перезапуск сервиса на сервере через SSH. Автоматизация этого процесса минимизирует время и снижает вероятность ошибок, связанных с ручным развертыванием.
## Глава 5: Расширенные возможности Make
### Параллельное выполнение задач
Make поддерживает выполнение задач параллельно, что может значительно ускорить процесс автоматизации, особенно при работе с большими проектами. Для этого используется опция `-j`.
#### Пример использования параллельного выполнения
```bash
make -j4
```
В этом примере Make будет пытаться выполнять до четырех задач одновременно.
### Использование условных операторов