[feature/workstation-automation]: Add make
[feature/workstation-automation]: Add make

Create Makefile to build project

-----

Explanation of the rule :list :

- `.PHONY: list`
  declares target list a phony target, i.e., one not referring to a file,
  which should therefore have its recipe invoked unconditionally

- `$(MAKE) -prRn -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null`
  Invokes make again in order to print and parse the database derived from
  the makefile:

  * `-p` prints the database

  * `-Rr` suppresses inclusion of built-in rules and variables

  * `-q` only tests the up-to-date-status of a target (without remaking
  anything), but that by itself doesn't prevent execution of recipe
  commands in all cases; hence:

  * `-f` $(lastword $(MAKEFILE_LIST)) ensures that the same makefile is
  targeted as in the original invocation, regardless of whether it was
  targeted implicitly or explicitly with -f ....
  Caveat: this will break if your makefile contains include directives; to
  address this, define variable THIS_FILE := $(lastword $(MAKEFILE_LIST))
  before any include directives and use -f $(THIS_FILE) instead.

  * `:` is a deliberately invalid target that is meant to ensure that no
  commands are executed; 2>/dev/null suppresses the resulting error
  message. Note: This relies on -p printing the database nonetheless,
  which is the case as of GNU make 3.82. Sadly, GNU make offers no direct
  option to just print the database.

- `-v RS=`
  This is an `awk` idiom that breaks the input into blocks of contiguous
  non-empty lines.

- `/^# File/,/^# Finished Make data base/`
  Matches the range of lines in the output that contains all targets (true
  as of GNU make 3.82) - by limiting parsing to this range, there is no
  need to deal with false positives from other output sections.

- if ($$1 !~ "^[#.]")
  Selectively ignores blocks:
  * `#` ... ignores non-targets, whose blocks start with # Not a target:
  * `.` ... ignores special targets

  All other blocks should each start with a line containing only the
  name of an explicitly defined target followed by `:`

- egrep -v -e '^[^[:alnum:]]' -e '^$@$$' removes unwanted targets from
  the output:
  '^[^[:alnum:]]' ... excludes hidden targets, which - by convention - are
  targets that start neither with a letter nor a digit.
  '^$@$$' ... excludes the list target itself

- xargs
  Effectively converts the output lines to a single-line, space-separated
  list; omit this if you want each target name to appear on its own line.

------
MORE INFO: https://stackoverflow.com/questions/4219255/how-do-you-get-the-list-of-targets-in-a-makefile

paulopatto/dotfiles,paulopatto/dotfiles,paulopatto/dotfiles,paulopatto/dotfiles,paulopatto/dotfiles