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
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.
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
1 | zwischen.exe: $(OBJS) |
2 | linker-Kommando |
3 | Aufruf des zusätzlichen Tools, welches einen Header generiert |
4 | |
5 | dummy.c: original.c zusätzliches_header_file |
6 | Compiler_aufruf |
7 | |
8 | target.exe: dummy.o |
9 | 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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.