From 36f3bb9c47de6bb8046a2fea19b74aedb9195a5b Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Sun, 12 May 2024 02:23:03 +0200 Subject: Added a for subtargets and updated readme --- Makefile | 2 +- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ makext.mk | 2 +- 3 files changed, 64 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 1b94610..37470e7 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ help: .help demo: .assure -build-app: # Build the application +build-app: clean-cache # Build the application @echo "Building the application..." clean-cache: # Clean the cache diff --git a/README.md b/README.md index 3176763..0b43054 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,68 @@ Features include: - Automatic description inclusion in help message. - Automatic license inclusion in help message. +## How to use + +First you will need to download `makext.mk` file from the repository to +the same directory where you have `Makefile`. + +```sh +wget -O makext.mk https://github.com/mitjafelicijan/makext/raw/master/makext.mk +``` + +Now you can include it in your `Makefile`. + +```make +include makext.mk + +help: .help +``` + +> [!IMPORTANT] +> Make sure you create first target `help: .help` before any other +> targets in your `Makefile`. GNU Make will execute first target if +> no target provided as an argument when calling `make`. + +### Help extension + +This is all that is needed to start using `makext`. One of the extensions +is `.help` which displays all the targets in the `Makefile` and their +descriptions which are provided as comments next to the target definition. + +Lets check how and example `Makefile` would look. + +```make +include makext.mk + +help: .help + +build-app: clean-cache # Build the application + @echo "Building the application..." + +clean-cache: # Clean the cache + @echo "Cleaning the cache..." + +deploy-prod: # Deploy to production + @echo "Deploying to production..." + +run-tests: + @echo "Running tests..." +``` + +This will give us under we execute command `make` the following result. + +``` +Targets: + build-app Build the application + clean-cache Clean the cache + deploy-prod Deploy to production + run-tests Run tests +``` + +- Targets without defined comments next to the target will be ignored + from help list. +- Targets that start with `.` will also be ignored. + ## Acknowledgement - https://stackoverflow.com/a/59087509 diff --git a/makext.mk b/makext.mk index cf25906..58bd23b 100644 --- a/makext.mk +++ b/makext.mk @@ -17,7 +17,7 @@ ifdef MK_DESCRIPTION @echo "$(MK_DESCRIPTION)\n" | fmt endif @echo "Targets:" - @grep -vE '^[[:space:]]' $(MAKEFILE_LIST) | grep -E '^.*:.* #' | sed -E 's/(.*):.*#(.*)/ \1###\2/' | column -t -s '###' + @grep -vE '^[[:space:]]' $(MAKEFILE_LIST) | grep -E '^.*:.* #' | sed -E 's/(.*):(.*):.*#(.*)/ \2###\3/' | column -t -s '###' ifdef MK_LICENSE @echo "\n$(MK_LICENSE)" | fmt endif -- cgit v1.2.3