Hallo zusammen, ich nutze das klassische EmBitz 1.11 und habe eine Header-Datei, die bei jedem Build als neu behandelt werden soll. Sie enthält den Revisionsstring. Wird sie extern geändert (subwcrev) und ist nicht im Editor geöffnet, bekommt EmBitz das nicht mit, und im Kompilat ist ein alter Versionsstring. Gibt es einen einfachen Trick?
:
Bearbeitet durch User
xxx schrieb: > Menu->build->rebuild all target files? Gerald K. schrieb: > Alle Ojektdateien löschen. rm *.o Läuft ja beides aufs Gleiche hinaus: Alles neu bauen. Das war genau nicht das Ziel. Mit make hätte ich das .o-File über ein force-Target erzeugt. Aber es wäre ja irgendwie mit Kanonen auf Spatzen geschossen, nur für diesen kleinen Teil den Build-Prozess umzuwerfen.
:
Bearbeitet durch User
Warum nicht ein C-Datei version.c mit dem Inhalt char version[ ]="v2.1"; In die Headerdatei könnt man dann schreiben: extern char version[ ];
:
Bearbeitet durch User
Walter T. schrieb: > Gibt es einen einfachen Trick? Eine richtige IDE benutzen, die die Abhängigkeiten korrekt beachtet? Olivet
Gerald K. schrieb: > Warum nicht ein C-Datei version.c mit dem Inhalt char version[ ]="v2.1"; > > In die Headerdatei könnt man dann schreiben: extern char version[ ]; Stimmt. So herum klappt es. Wenn ich die C-Datei extern ändere, wird das im Build-Prozeß berücksichtigt. Wenn ich die H-Datei extern ändere, nicht. Das ist irgendwie merkwürdig, aber eine brauchbare Lösung.
:
Bearbeitet durch User
Walter T. schrieb: > Gerald K. schrieb: > >> Warum nicht ein C-Datei version.c mit dem Inhalt char version[ ]="v2.1"; >> In die Headerdatei könnt man dann schreiben: extern char version[ ]; > > Stimmt. So herum klappt es. Wenn ich die C-Datei extern ändere, wird das > im Build-Prozeß berücksichtigt. Wenn ich die H-Datei extern ändere, > nicht. Das ist irgendwie merkwürdig, aber eine brauchbare Lösung. **Da könne eine Lösung dabei sein** : https://qastack.com.de/programming/2394609/makefile-header-dependencies Ich hatte das Problem beim Bilden der Abhängikeit mit einem kleinen Hilfsprogramm gelöst. Ist schon lange her, vielleicht finde ich dieses Programm mit einer Beschreibung des Problems und dessen Lösung. Im Internet gibt es eine Lösung mit **SED** : https://stackoverflow.com/questions/297514/how-can-i-have-a-makefile-automatically-rebuild-source-files-that-include-a-modi?rq=1 Auszug daraus : $(OBJDIR)/%.d: %.c $(CC) -MM -MG $(CPPFLAGS) $< | **sed** -e 's,^\([^:]*\)\.o[ ]*:,$(@D)/\1.o $(@D)/\1.d:,' >$@ Mein Hilfprogramm hat die fehlerhafte Abhängigkeitsliste im Nachhinein korrigiert.
:
Bearbeitet durch User
Gerald K. schrieb: > Im Internet gibt es eine Lösung mit **SED** : Da stammt aber aus der Zeit der Lochkarten. Aktuelle Compiler können das auch, und aktuelle IDEs nutzen das auch. Oliver
Walter T. schrieb: > ich nutze das klassische EmBitz 1.11 wäre es dann nicht angebracht ein Ticket beim Hersteller zu eröffnen???
Walter T. schrieb: > Wird sie extern geändert (subwcrev) und ist nicht im Editor geöffnet, > bekommt EmBitz das nicht mit, und im Kompilat ist ein alter > Versionsstring. Auch wenn die Datei extern geändert wird, bekommt EmBitz das mit. Das klappt hervorragend. Ich mache das sogar sehr oft unter Linux, da mein EmBitz-Verzeichnis auf einem Samba-Laufwerk liegt. Ausnahme: Du hast vergessen, die Header-Datei zum Projekt hinzuzufügen. Dann bekommt EmBitz das natürlich nicht mit. Das solltest Du überprüfen.
:
Bearbeitet durch Moderator
Gerald K. schrieb: > Ich hatte das Problem beim Bilden der Abhängikeit mit einem kleinen > Hilfsprogramm gelöst. Ist schon lange her, vielleicht finde ich dieses > Programm mit einer Beschreibung des Problems und dessen Lösung.
1 | %.o: %.c |
2 | $(XCC) -c -o $*.o $(CFLAGS) $< |
3 | @echo $*.o > $*.d |
4 | @$(XCC) -MM $*.c >> $*.d |
5 | @depcor $*.d |
Ein Lösung sofern jemand noch selbst make-files erstellt. Durch Verwendung einer IDE, die make-files automatisch erstellt, geht das Wissen verloren.
Gerald K. schrieb: > Ein Lösung sofern jemand noch selbst make-files erstellt. Ich habe ein solches Konstrukt im Einsatz:
1 | OBJS := main.o uart.o bla.o blub.o |
2 | DEPS := $(OBJS:.o=.od) |
3 | |
4 | ... |
5 | |
6 | %.o: %.c |
7 | $(CC) $(CFLAGS) -c -o $@ $< |
8 | $(CC) $(CFLAGS) -MM $< > $@d |
9 | |
10 | clean: |
11 | rm -f $(OBJS) $(DEPS) $(MAIN) |
12 | |
13 | ... |
14 | |
15 | -include $(DEPS) |
Man kann die Abhängigkeiten auch gleichzeitig mit dem Compilerlauf erzeugen lassen, aber dazu war ich bisher zu faul. Wichtig ist die letzte Zeile, in der die Abhängigkeiten eingebunden werden. Fehlt eine Datei, ist das kein Fehler - aber dann fehlt auch das Objekt, es muss also sowieso kompiliert werden.
Fatal ist nur, wenn eine Headerdatei geändert wird und das nicht in den Code einfließt. Daher sollte bei Abschluss einer Version **alles** neu kompilieren.
Gerald K. schrieb: > Daher sollte man sich bei solch grundlegenden Funktionen 100%-tig auf das Build-System verlassen können. Vorausgesetzt, man hat das Projekt richtig eingerichtet, muß das richtig gebaut werden. Oliver
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.