www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik make zweimal compilieren


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

ich nutze den GNU make und gcc, aktuell compiliere ich einmal alles 
durch und linke dann. Das funktioniert auch soweit ohne Probleme. Nun 
muss ich um ein nach dem Linken erzeugtes Headerfile mit in das Target 
zu bekommen zwei c-files nochmals compilieren und erneut linken.

Leider geht das irgendwie nicht, ich vermute dass make erkennt dass es 
die zwei files eben erst compiliert hat und die object files noch 
brandaktuell sind, und deshalb dies nicht ausführt. Ich habe auch schon 
versucht automatisiert die object Files zu löschen, leider hat das am 
Ergebnis nichts geändert.

Hat jemand eine Idee wie ich das hinbekommen könnte?

ausschnitt aus meinem makefile:

all : $(TARGET) $(CRCTARGET)

$(TARGET) : $(OBJS)

  $(LINKER) $(LFLAGS) -o $(OBJS_DIR)$(TARGET)
  $(CRC) $(CRCFLAGS) $(OBJS_DIR)$(TARGET).hex
         $(shell calculate.exe)
  $(RM) $(OBJS_DIR_WIN)\htb*.o

$(CRCTARGET) : $(SNDOBJS)
  @echo '!!! CALL LINKER $(OBJS)'
  $(LINKER) $(LFLAGS) -o $(OBJS_DIR)$(SNDTARGET)
  @echo '!!! SUCCESSFULLY BUILDED target: $@'


Wie gesagt, die c-files die hinter $(OBJS) stehen werden compiliert, und 
gelinkt. Danach mache ich meine Berechnugnen und lösche die Objectfiles. 
Jetzt würde ich erwarten dass er die c-files hinter $(SNDOBJS) 
compiliert und dann alles nochmals linkt. Macht er aber nicht, er 
versucht nur direkt zu linken, was natürlich schief geht, da ich die 
object files gelöscht habe.

Gruß

Hans

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans schrieb:
> Nun
> muss ich um ein nach dem Linken erzeugtes Headerfile mit in das Target
> zu bekommen zwei c-files nochmals compilieren und erneut linken.

Dazu sollte es doch genügen, das Headerfile in die Abhängigkeitsliste 
der betreffenden C-Sourcefiles einzutragen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt aufs make drauf an.

Ich hab das schon lange nicht mehr gemacht, aber zumindest früher 
arbeitete make so, dass es einmalig den Abhängigkeitsbaum am Anfang 
ausgewertet, überprüft, und sich die Kommandoliste zusammengestellt hat. 
Da war es dann immer schwierig, solche Dinge reinzubekommen.

Aber der grundsätzliche Weg lief meistens so, dass man ein oder mehrere 
'Hilfsziele' für make benutzte.

etwa so
zwischen.exe:   $(OBJS)
      linker-Kommando
      Aufruf des zusätzlichen Tools, welches einen Header generiert

dummy.c:  original.c  zusätzliches_header_file
      Compiler_aufruf

target.exe:   dummy.o
      linker-Kommando

man benutz also ein paar Hilfsfiles um für den make wieder eine linieare 
Sequenz zu erhalten.
Das dummy.c macht dann nichts anderes, als das original.c zu 
inkludieren.
Sein einziger Zweck ist es, ein C-File zu haben, welches vom erzeugten 
Header abhängig ist und erst compiliert werden kann, nachdem das erste 
mal gelinkt wurde. Und erst wenn dieses C-File compiliert wurde, wird 
das endgültige EXE gelinkt.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Ich hab das schon lange nicht mehr gemacht, aber zumindest früher
> arbeitete make so, dass es einmalig den Abhängigkeitsbaum am Anfang
> ausgewertet, überprüft, und sich die Kommandoliste zusammengestellt hat.

Hallo,

wäre es da nicht am einfachsten, 2 make files nacheinander aufzurufen? 
Habs auch schon lang nicht mehr gemacht, IDE sei dank.

Gruss Reinhard

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.