Forum: Compiler & IDEs Make und Dateidatum


von Andre (Gast)


Lesenswert?

Hallo,

make veranlasst ja nur die (Neu)erzeugung eines Objectfiles, wenn eine
Datei aus der Dependencyliste ein neueres Datum hat, als das zu
erzeugende Objectfile. Soweit korrekt?

Kann ich make dazu bringen auch den Compiler anzuwerfen, wenn das
Dateidatum unterschiedlich zwischen .o und .c/.h ist?

Problem: Wenn ich mehrere ältere Dateien wieder ins Projekt kopiere,
möchte ich diese dann auch tatsächlich mitcompiliert haben, obwohl
deren Datum älter ist. Ich möchte nicht jedesmal jede einzelne Datei
anfassen, und deren Datum umstellen! (zu fehleranfällig; vergesslich).

Ein make all möchte ich aus Zeitgründen vermeiden! (dauert einige
Minuten!)

Wie geht man dabei normalerweise an das Problem heran?

Danke, Andre

von Rufus T. Firefly (Gast)


Lesenswert?

Kopiervorgang älterer Dateien mit touch verbinden ...

von Andre (Gast)


Lesenswert?

Geht leider nicht, da die Dateien automatisch aus einer
Versionsverwaltung rausfallen. Oder wenn jemand das Touch vergisst,
dann haben wir das Problem wieder... Meine Vorstellung ist, daß das
schon irgendwo am Make angreifen muß - erst damit wärs akzeptabel
sicher.

Weitere Ideen?

Danke, Andre.

von Rufus T. Firefly (Gast)


Lesenswert?

Der Ansatz, den Compiler anzuwerfen, wenn Datum von *.c und *.o
unterschiedlich sind ...

naja, worin besteht jetzt der Unterschied zu 'nem make -all?

Vor allem ist es vollkommen legal und sogar der Regelfall, daß *.o die
neueste von den beteiligten Dateien ist ...

Bietet denn Deine Versionsverwaltung nicht die Möglichkeit,
irgendwelche Prozeduren/Skripte beim "rausfallenlassen" von Dateien
aufzurufen?

von OldBug (Gast)


Lesenswert?

Wie wärs denn, wenn Du einfach die betreffenden .o-Files vor dem 'make
all' (was nicht make clean all entsprechen sollte!*) löschst?

*) 'make all' sollte eigentlich dafür sorgen, daß alles, was nicht
aktuell ist oder von dem das Ziel nicht existiert, (neu) erzeugt wird
wird.

von Rufus T. Firefly (Gast)


Lesenswert?

Wenn 'make all' sich so verhält, dann meinte ich 'make clean all',
in meinem Satz

   naja, worin besteht jetzt der Unterschied zu 'nem make -all?

von OldBug (Gast)


Lesenswert?

Hm, es existiert nicht...

 [15:19:10] $ make -all
make: invalid option -- a
Usage: make [options] [target] ...
Options:
[..]

von Rufus T. Firefly (Gast)


Lesenswert?

Meine Güte. Vergesst den Bindestrich.

Die Aussage sollte dennoch verständlich sein, wenn man denn über den
Tellerrand des Bindestriches hinwegsieht.

von OldBug (Gast)


Lesenswert?

Na, sorry, das war nicht "Besserwisserisch" gemeint, ich habe Deine
Frage wahrscheinlich nur falsch verstanden. Ich dachte, Du beziehst
Dich dabei auf den Unterscheide zwischen 'make all' und 'make
-all', sorry ;-)

Der Unterschied zwischen 'make all' und 'make clean all' ist, daß
daß zuerst das Target 'clean' "gemacht" (ausgeführt/whatever) wird.
Dieses Target ist dafür Zuständig, alle erzeugten Dateien und was sonst
noch so während dem make-Prozess anfällt, wieder zu vernichten! Das
muss man natürlich in diesem Target Konfigurieren, hier ein Beispiel:

  $(REMOVE) $(TARGET).hex
  $(REMOVE) $(TARGET).eep
  $(REMOVE) $(TARGET).cof
  $(REMOVE) $(TARGET).elf
  $(REMOVE) $(TARGET).map
  $(REMOVE) $(TARGET).sym
  $(REMOVE) $(TARGET).lss
  $(REMOVE) $(OBJ)
  $(REMOVE) $(LST)
  $(REMOVE) $(SRC:.c=.s)
  $(REMOVE) $(SRC:.c=.d)
  $(REMOVE) .dep/*

Auf der Kommandozeile sieht das dann so aus:

rm -f main.hex
rm -f main.eep
rm -f main.cof
rm -f main.elf
rm -f main.map
rm -f main.sym
rm -f main.lss
rm -f main.o
rm -f main.lst
rm -f main.s
rm -f main.d
rm -f .dep/*

Wenn ich mir jetzt die Abhängigkeit von main.c und main.o ansehe, dann
wird schnell klar, daß main.o nicht existiert und somit erstellt werden
muss. Ist main.o vorhanden und aktueller (neuer) als main.c, gibt es
nichts für dieses Target zu tun, ist es älter, wird es ebenfalls
erstellt...

von Andre (Gast)


Lesenswert?

Habe gerade festgestellt, daß meine Forderung nach unterschiedlichem
Dateidatum (.o und .c/.h) ja garnicht funktionieren kann, da diese
immer unterschiedlich sind...

> naja, worin besteht jetzt der Unterschied zu 'nem make -all?
Mein gewünschter Unterschied wäre, daß dann nur die Dateien compiliert
würden, die sich auch tatsächlich geändert hätten - ob die nun älter
oder neuer geworden sind, sollte egal sein. Aber das geht ja nicht, wie
ich in meinem einleitenden Satz (eben) festgestellt habe. :-(

> Vor allem ist es vollkommen legal und sogar der Regelfall, daß *.o
> die neueste von den beteiligten Dateien ist ...
genau das - und deswegen is meine Idee leider nix.

> Bietet denn Deine Versionsverwaltung nicht die Möglichkeit,
> irgendwelche Prozeduren/Skripte beim "rausfallenlassen" von
Dateien
> aufzurufen?
würde das Problem bei handkopierten Dateien auch nicht beheben. ->
nicht 100% dicht.

> Wie wärs denn, wenn Du einfach die betreffenden .o-Files vor
> dem 'make all' löschst?
ginge natürlich, erfordert aber wieder daß daran gedacht wird -> wieder
fehleranfällig...

Aber ich sehe schon - da gibt's keine gescheite Lösung, muß wohl doch
ein Script beim Auschecken die Dateien "anfassen", und es muß halt
nach einem manuellen Copy unbedingt ein kompletter Rebuild durchgeführt
werden.

Oder?

Danke, Andre

von Rufus T. Firefly (Gast)


Lesenswert?

Du könntest allenfalls ein -zusätzliches- Werkzeug verwenden, das für
jede zum Projekt gehörende Source-Datei (*.c, *.h) deren Zeitstempel
speichert und bei Abweichungen in egal welcher Richtung gegenüber
gespeicherten Zeitstempeln resultierende *.o-Dateien löscht.

Dazu brauchst Du allerdings auch einen Dependency-Generator, der
herausfindet, welche Headerdatei um wieviele Ecken von welcher
*.c-Datei eingebunden wird.

Ob es derartige Werkzeuge bereits gibt, entzieht sich meiner Kenntnis,
aber so etwas lässt sich sicherlich auch auf skript-Ebene hinbekommen
(mit 'ner Datenbank im Hintergrund).

Viel Spaß.

@Oldbug:
Dann ist ja gut. Haben wir nur etwas aneinander vorbei gedacht, macht
auch nichts. Danke für die Aufklärung, genau so meinte ich's.

Gewinnst Du auch den Eindruck, daß der hier herrschende Tonfall in den
letzten Wochen deutlich rauher geworden ist?
(das bezieht sich explizit nicht auf Beiträge in diesem Thread!)

von OldBug (Gast)


Lesenswert?

Hm, naja, also es ist schon in letzter Zeit so, daß sich einige sehr
schnell ...ähm... angep* fühlen ;)

von Rufus T. Firefly (Gast)


Lesenswert?

@Oldbug: D'accord. Ob das am Wetter liegt? Vielleicht schlägt das ja
auch auf die Frisur?

von Jörg Wunsch (Gast)


Lesenswert?

Ja, elektrostatische Aufladungen durch das nahende Gewitter =>
Haare stehen ab.  Anschließend Regen => Wuschelkopf.

:-)

von OldBug (Gast)


Lesenswert?

@Jörg:
Du dürftest da aber recht wenig erfahrung mit haben, wenn ich mich
recht erinnere!?!? :-)

Was mir sinst noch so durch den Kopf ging: jeder erwischt schon mal den
"falschen Ton" und bei der Anzahl User, die sich hier auf der Seite
rumtreiben, kann sich sowas auch schon mal häufen. Von daher: einfach
mal ignorieren hilft oft ;)

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
Noch kein Account? Hier anmelden.