Self documented Makefile - Simple example#
Following example shows simple self documented Makefile
Each target is display with description in single line
Character
:
is used to separate target name and description
Hint
One can use multiple
:
to separate details in description (different fields)Following example uses command
column
to display tasks in nice format
Important
If one uses multiple
:
characters, one should update each description to have the same numbers of:
.
Code#
# ============================================================================
# Based on page:
# https://gist.github.com/prwhite/8168133
#
# Example of self-documented makefile
#
# Add the following 'help' target to your Makefile
# And add help text after each target name starting with '\#\#'
# ============================================================================
.PHONY: help
help: ## Help: Show this help message
@echo 'usage: make [target] ...'
@echo
@echo 'Targets:'
@echo '========'
@egrep '^(.+)\:\ ##\ (.+)' ${MAKEFILE_LIST} | column -t -c 2 -s ':#'
.PHONY: bump-ver-patch
bump-ver-patch: ## Helper: Bump version - patch level
bumpversion patch
.PHONY: validate
validate: ## Validate: Run ansible-lint validator
@echo ""
@echo "== Run ansible-lint =="
ansible-lint tower-*.yml
.PHONY: validate-all
validate-all: ## Validate: Run all validation scripts
validate-all: galaxy_install validate galaxy_remove
.PHONY: galaxy-install
galaxy-install: ## Ansible-galaxy: Install roles
ansible-galaxy install -r roles/requirements.yml
@echo ""
@echo "== Installed roles =="
ansible-galaxy list
.PHONY: galaxy-remove
galaxy-remove: ## Ansible-galaxy: Remove roles
@echo "== Removing galaxy roles =="
ansible-galaxy install -r roles/requirements.yml | \
awk '{print $$2}' | xargs -I {} ansible-galaxy remove {}
@echo ""
@echo "== Result in 'roles' folder =="
ls -la roles/
.PHONY: clean
clean: ## Clean: Clean all temporary files
$(MAKE) -C docs clean
rm -fr *~
Result#
Running make
without any arguments will display list of available tasks.
usage: make [target] ...
Targets:
========
help Help Show this help message
bump-ver-patch Helper Bump version - patch level
validate Validate Run ansible-lint validator
validate-all Validate Run all validation scripts
galaxy-install Ansible-galaxy Install roles
galaxy-remove Ansible-galaxy Remove roles
clean Clean Clean all temporary files
Im result above one can see three columns:
First is with name of target
Second is with group for target
Last is longer description