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
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.
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?
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.
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?
Hm, es existiert nicht... [15:19:10] $ make -all make: invalid option -- a Usage: make [options] [target] ... Options: [..]
Meine Güte. Vergesst den Bindestrich. Die Aussage sollte dennoch verständlich sein, wenn man denn über den Tellerrand des Bindestriches hinwegsieht.
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...
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
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!)
Hm, naja, also es ist schon in letzter Zeit so, daß sich einige sehr schnell ...ähm... angep* fühlen ;)
@Oldbug: D'accord. Ob das am Wetter liegt? Vielleicht schlägt das ja auch auf die Frisur?
Ja, elektrostatische Aufladungen durch das nahende Gewitter => Haare stehen ab. Anschließend Regen => Wuschelkopf. :-)
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.