Makefile

Table of Contents

Overview

Simple usage of requests:

.PHONY: docs
init:
  pip install pipenv --upgrade
  pipenv install --dev --skip-lock
test:
  # This runs all of the tests, on both Python 2 and Python 3.
  detox
ci:
  pipenv run py.test -n 8 --boxed --junitxml=report.xml

test-readme:
  @pipenv run python setup.py check --restructuredtext --strict && ([ $$? -eq 0 ] && echo "README.rst and HISTORY.rst ok") || echo "Invalid markup in README.rst or HISTORY.rst!"

flake8:
  pipenv run flake8 --ignore=E501,F401,E128,E402,E731,F821 requests

coverage:
  pipenv run py.test --cov-config .coveragerc --verbose --cov-report term --cov-report xml --cov=requests tests

publish:
  pip install 'twine>=1.5.0'
  python setup.py sdist bdist_wheel
  twine upload dist/*
  rm -fr build dist .egg requests.egg-info

docs:
  cd docs && make html
  @echo "\033[95m\n\nBuild successful! View the docs homepage at docs/_build/html/index.html.\n\033[0m"

Which file name should I use? Makefile, makefile, GNUMakefile, … discussion

Selective Search for files: vpath dicussion

Using vpath is easy to make things complicated and brittle. Try not to use vpath so that you could keep things sane.

Refer variables defined later howto

.SECONDEXPANSION:
AVAR = top
onefile: $(AVAR)
twofile: $$(AVAR)
AVAR = bottom

Run make within make howto

subsystem:
    cd subdir && $(MAKE)

or

subsystem:
    $(MAKE) -C subdir

CLI Options reference

-d
Print debugging information in addition to normal processing.

Conditionals(ifeq, etc) reference

bar =
foo = $(bar)
ifdef foo
frobozz = yes
else
frobozz = no
endif