EmBitz: Neu-Kompilierung erzwingen?

#6697118
Lesenswert?

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?
#6697197
Lesenswert?

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.
#6697305
Lesenswert?

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.
#6697402
Lesenswert?

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.
Moderator Persönliche Seite #6698951
Lesenswert?

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.
#6699660
Lesenswert?

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.
Angehängte Dateien:
#6700918
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren