www.mikrocontroller.net

Forum: Compiler & IDEs Böses makefile


Autor: holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich programmiere ich ja nur in C.
Nun musste aber mal ein ASM File zwecks Timing herhalten.
WinAVR 4.1.2

Problem:
Datei spifast.S zum makefile hinzugefügt.

ASRC    = ../spifast.S

Nach make clean war sie dann weg !?? Gelöscht.
Nimmt man stattdessen spifast.s funktioniert es.
Datei noch vorhanden und Programm wird übersetzt.

Was stimmt an dem makefile nicht ?
Im Anhang das funktionierende makefile.

Ändert man diese Zeile im makefile so:
ASRC    = ../spihyper.s ../spifast.S

und benennt spifast.s in spifast.S um wird bei make clean
spifast.S gelöscht. Warum ?

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wohl eine von den fiesen impliziten make-Regeln?

Ich habs bei mir so: (snip)
ASRC           = <S-files>
SRC            = <c-files>

OBJ            = $(ASRC:.S=.o) $(SRC:.c=.o) 
ASM            = $(SRC:.c=.s)

asm: $(ASM) $(ASRC)

%.s: %.c Makefile
  $(CC) -S $< $(ASMFLAGS) $(CFLAGS)
  
%.o: %.s
  $(CC) -c -x assembler $< -o $@ 

%.o: %.S
  $(CC) -c -x assembler-with-cpp $< -o $@ 

Anmerkung:

Ich lasse immer das .s aus .c erzeugen, weil ich das mit -fverbose-asm 
-dp aussagekräftiger finde als as-Dumps.

Zudem lasse ich die Dependencies so erzeugen, dass .s von .c abhängt und 
nicht .o von .c

Autor: Frank Lorenzen (florenzen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersetze s durch S in OBJ und im %o:%s Target.
.s sind automatisch generierte Assembler-Files. Die werden beim clean 
weggeräumt.

gruss
f

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ersetze s durch S in OBJ und im %o:%s Target.
>.s sind automatisch generierte Assembler-Files. Die werden beim clean
>weggeräumt.

So was dachte ich mir ja auch schon ;)
Aber wieso wird dann statt meinem spifast.s (s klein)
mein spifast.S weggeräumt? Das spifast.s gelöscht wird könnte ich da
ja noch verstehen.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ersetze s durch S in OBJ und im %o:%s Target.

Habs grade mal gemacht und so gehts.
Jetzt wird alles mit *.s gelöscht. Und nicht *.S.
So wie es eigentlich sein sollte.

Danke Frank.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:

> Aber wieso wird dann statt meinem spifast.s (s klein)
> mein spifast.S weggeräumt?

Weil Windows das nicht unterscheiden möchte (obwohl es dies auf allen
aktuellen Filesystemen könnte).

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Aber wieso wird dann statt meinem spifast.s (s klein)
>> mein spifast.S weggeräumt?

>Weil Windows das nicht unterscheiden möchte (obwohl es dies auf allen
>aktuellen Filesystemen könnte).

Oh doch ,das kann es. Und ich hab W98 benutzt.
Man beachte diese Zeile:

ASRC    = ../spihyper.s ../spifast.S

spifast.S wurde gelöscht. spihyper.s aber nicht!

Was sich dann wieder hiermit beisst:

>.s sind automatisch generierte Assembler-Files. Die werden beim clean
>weggeräumt.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag:

Nach der Änderung im makefile von .s auf .S
wird spihyper.s bei make clean gelöscht.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal .PRECIOUS versucht?

.PRECIOUS: %.s
.PRECIOUS: %.S

Falls das hülft, waren implizite Makeregeln schuld. Zudem ist zb .elf 
abhängig von .o, aber make weiss nicht wie es an das .o kommen soll. das 
.o wird dann aus .s gemacht und danach .s gelöscht (fälschlicherweise 
.S) weil .s ja "nur" temporär ist... oder so

http://start.it.uts.edu.au/w/doc/solaris/gmake/mak...

Jedenfalls funktioniert mein Makefile. Geht das auch nicht bei Dir? äh 
und all ist abhängig von asm :-)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johann,

entschuldige bitte das ich deine Anmerkungen noch nicht
ausprobiert habe.

Ich versuche mal mein Problem zu komprimieren:

Ausgehend von meinem makefile das ich oben gepostet habe
mit folgender Änderung:

ASRC    = ../spihyper.s ../spifast.S

spifast.s auf spifast.S umbenannt

make clean
spifast.S wird gelöscht. spihyper.s wird nicht gelöscht.

Nach der Änderung von Frank

make clean
spifast.S wird nicht gelöscht. spihyper.s wird gelöscht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.