Makefile

·

GNU Make - программа для генерации программ из исходников. Изначально было заточено под C, но потом стали использовать и как файлик под скрипты.

Важно, что при вызове команды make не учиывается переменная окружения SHELL, а просто вызывается sh.

Конфиг хранится в файле Makefile.

Syntax

# задание опциональных аргументов
arg ?= "default"

Base

Команда, чтобы вывести другие команды плюс сразу напоминаем про .PHONY:

.PHONY: help

## help: show list of available commands.
help : Makefile
	@echo "+--------------------+"
	@echo "| AVAILABLE COMMANDS |"
	@echo "+--------------------+\n"
	@cat Makefile | grep "##" | sed -n 's/^## /make /p' | column -t -s ':' && echo ""

Python

Типичный файл для python:

  • создать virtualenv
  • установить зависимости из requirements.txt
  • запустить приложение
  • хорошее дополнение: генерация по pip-tools и разделе prod/dev

Шаблон:

SHELL:=/bin/bash
VENV_DIR=.venv
VENV_BIN=$(VENV_DIR)/bin
PYTHON=$(VENV_BIN)/python3
PIP=$(VENV_BIN)/pip3

## venv: create virtualenv
venv: $(VENV_DIR)

$(VENV_DIR):
	python3 -m venv $(VENV_DIR)

## setup: init project - create virtualenv, install requirements
setup: venv pip

## pip-tools: generate requirements.txt and sync with virtualenv
pip-tools: venv requirements.in requirements-dev.in
	$(PIP) install -U pip-tools
	$(VENV_BIN)/pip-compile --generate-hashes --output-file=requirements.txt requirements.in
	$(VENV_BIN)/pip-compile --generate-hashes --output-file=requirements-dev.txt requirements-dev.in
	$(VENV_BIN)/pip-sync requirements.txt requirements-dev.txt

## pip: install requirements
pip: requirements.txt
	$(PIP) install -r requirements.txt
	$(PIP) install -r requirements-dev.txt

## run: run project
run: venv
	$(PYTHON) src/app.py

## clean: clear python project (*.pyc, etc).
clean:
	find . -name '*.pyc' -delete
	find . -name '__pycache__' -type d | xargs rm -fr

Обратные ссылки