Ins Makefile eingewobene Hilfe-Einzeiler...

Offtopic Themen bitte hier hinein.
Antworten
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Ins Makefile eingewobene Hilfe-Einzeiler...

Beitrag von yeti »

----------8<-----{20170606-1121-GMT}----->8----------

Heute im Sonderangebot:

Ins Makefile eingewobene Hilfe-Einzeiler...

Billig wie [###ZENSIERT###] und dabei mindestens so nützlich wie dressierte Feuerameisen!

Code: Alles auswählen

$ make
            help - show help
         compile - just compile...
             run - calculate the picture using spinsim (compiles if neccessary)
           clean - remove editor backup files
         clobber - remove built stuff (includes clean)
$ make compile 
/opt/openspin/bin/openspin -u main.spin
Propeller Spin/PASM Compiler 'OpenSpin' (c)2012-2016 Parallax Inc. DBA Parallax Semiconductor.
Version 1.00.80 Compiled on May  8 2017 04:19:27
Compiling...
main.spin
|-SpinsimConio.spin
Done.
Unused Method Elimination:
    7 methods removed
    0 objects removed
  200 bytes saved
--------------------------
Program size is 420 bytes
...diese Idee sollt ich wohl mal aufheben...

Hilfe in Makefiles wollt ich schon lange mal handlich(er) machen... also so, daß die Hilfe bei der jeweiligen Regel steht, statt irgendwo extra als kompletter Hilfe-Klumpen, den man eh dauernd vergißt aktuell zu halten.

...wenn's in ein paar Tagen noch wie eine gute Idee ausschaut, dann ist das wohl Kandidat zum Einbauen in die nächste Version des TriOS-Makefiles... ;-)

Code: Alles auswählen

$ cat Makefile 
OPENSPIN   = /opt/openspin/bin/openspin
SPINSIM    = /opt/parallax/bin/spinsim

#!# show help
help:
        @awk -F: 'match($$0,"^#!# .*$$"){s=substr($$0,RSTART+4,RLENGTH-3);getline;printf"%16s - %s\n",$$1,s}' $(MAKEFILE_LIST)

#!# just compile...
compile: main.binary

#!# calculate the picture using spinsim (compiles if neccessary)
run: pic.pgm

#!# remove editor backup files
clean:
        rm -f *~

#!# remove built stuff (includes clean)
clobber: clean
        rm -f main.binary pic.pgm

main.binary: main.spin $(MAKEFILE_LIST)
        $(OPENSPIN) -u main.spin

pic.pgm: main.binary $(MAKEFILE_LIST)
        $(SPINSIM) main.binary > $@
Kommentare?


----------8<-----{20170606-1606-GMT}----->8----------

Wenn man...

Code: Alles auswählen

#!# show help
help:
        @awk -F: 'match($$0,"^#!# .*$$"){s=substr($$0,RSTART+4,RLENGTH-3);getline;printf"%16s - %s\n",$$1,s}' $(MAKEFILE_LIST)
...in z.B. eine "help.mk" benamste eigene Datei auslagert, dann braucht man am Anfang eigener Makefiles nur...

Code: Alles auswählen

include help.mk
...einzufügen, damit es Vorne steht und bei Eingabe von "make" ohne Ziel zum Default-Ziel wird. "make help" findet dank "$(MAKEFILE_LIST)" nicht nur seine eigene Hilfezeile, sondern auch die anderer Include-Makefiles. Auch zu Umbenennen des Toplevel-Makefiles gähnt es nur, denn auch das wird dank "$(MAKEFILE_LIST)" richtig erfaßt.

----------8<-----{20180428-1405-GMT}----->8----------

Ok... make-Ziele, die keine Dateisystemobjekte darstellen, sollten via ".PHONY: name" gekennzeichnet werden, damit die Existenz gleichnamiger Dateisystemobjekte keine Wervirrung auslöst.

----------8<-----{TBC}----->8----------
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Benutzeravatar
yeti
Beiträge: 2300
Registriert: Fr 27. Aug 2010, 14:48
Wohnort: Wrong Planet
Kontaktdaten:

Re: Ins Makefile eingewobene Hilfe-Einzeiler...

Beitrag von yeti »

----------8<-----{20191118-1717-GMT}----->8----------

Ok...
Ein kleiner Schnitt mit großer Wirkung... oder so...
Die maximale Länge der Target-Namen wird nun bestimmt und die Ausgabe dementsprechend angepaßt und nimmer als Einzeiler ins Makefile eingebacken ist der awk-Kram fast schon kurz vor bald mal lesbar...

Code: Alles auswählen

$ cat Makefile-1573910376 
#!# Guess what ;-)
help:
        @awk '\
                BEGIN { FS=":" ; n=0 } \
                match($$0,"^#!# .*$$") { \
                        d[n]=substr($$0,RSTART+4,RLENGTH-3) ;\
                        getline ;\
                        t[n++]=$$1 ;\
                        if(l<length($$1)) l=length($$1) \
                        } \
                END { \
                        for(i=0;i<n;i++) printf"%*s - %s\n",l,t[i],d[i] \
                }' $(MAKEFILE_LIST)
.PHONY: help 

#!# Yes, Mom! I do know how to clean up!
clean:
        rm -fv *~
.PHONY: clean

Code: Alles auswählen

$ make -f Makefile-1573910376 
 help - Guess what ;-)
clean - Yes, Mom! I do know how to clean up!
----------8<-----{20191118-1924-GMT}----->8----------

Code: Alles auswählen

PORT = /dev/propeller
BAUD = 115200

#!# Terminal zum Propeller an $(PORT) mit $(BAUD) Bd starten
term:
        screen $(PORT) $(BAUD)
.PHONY: term
Die Auswertung von Variablen und anderen Konstrukten im Makefile findet leider noch nicht statt. Die Hilfezeile würde hier "$(PORT)" und "$(BAUD)" nicht mit den zuvor gesetzten Werten ersetzen. Es ist lösbar, aber eine nette lesbare Lösung, die auch für den Rechner nicht in einen make-Aufruf pro Help-Zeile hinaus läuft habe ich noch nicht ertüftelt. Vielleicht wird es sogar einfacher, Hilfe als Hilfe-Targets zu formulieren, die dann von allen Fähigkeiten von Make profitieren würden à la:

Code: Alles auswählen

help_term:
        @echo "Terminal zum Propeller an $(PORT) mit $(BAUD) Bd starten"
.PHONY: term
Das muß noch gären...

----------8<-----{Ommmmmmmmm...}----->8----------
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Antworten