Am Mit, 2002-03-20 um 04.53 schrieb Bertram Scharpf:
Hallo nochmal,
Am Mittwoch, 20. März 2002 01:14 schrieb Bernd Brodesser:
* Bertram Scharpf schrieb am 19.Mär.2002:
Eine Möglichkeit gibt es, daß `make' nichts tut, obwohl es sollte. Die aber tritt bei Deinem Problem sehr wahrscheinlich _nicht_ auf. Änderungen in einer C-Header-Datei ("*.h") werden von `make' nicht erfaßt, es vergleicht nur das Datum der "*.c" mit den Kompilaten. Wurden die entsprechenden "*.c" nicht angefaßt, wird auch nicht kompiliert.
Aber nur dann, wenn man kein Makefile hat, aber dann gibt es bei nur make oder bei make clean eine Fehlermeldung, da make damit nichts anfangen kann.
Wenn es aber ein Makefile gibt, dann soll da gefälligst auch die Abhängigkeiten von *.h drin stehen.
Hab' ich nicht ganz verstanden; was meinst Du damit?
Ich mußte mir extra ein Tool schreiben, das die Ausgabe von "cc ... -MM ..." einem Makefile beibringt. Davon mal abgesehen, dass "gcc -MM" (nicht cc, -MM ist gcc spezifisch) richtiger wäre, ist dem so. Nur, selbstverständlich gibt es derartige Tools schon.
Da ein "*.h" /nie/ in ein "*.c" übersetzt wird, und da .c-Dateien ihre .h's wechseln können, ist `make' zwangsläufig überfordert, oder? Make selbst kann es nur insofern wie Du ihm die Abhängigkeiten ins Makefile schreibst.
Doch wie Du oben selbst schon erkannt hast, lässt sich dieses weitgehend mittels Tools erledigen. Der Standard-Ansatz dazu wäre, die Ausgabe von gcc -MM oder gcc -M in eine Datei umzuleiten und diese durch make in das Makefile wieder einzulesen oder anzuhängen [1,2](vgl. info make, Stichwort include) oder anzuhängen [3]. Ralf [1] Vgl. "make deps" des Linuxkernels. [2] Automake generiert diese Abhängigkeiten "on-the-fly", während der Compilation und sorgt automatisch dafür, dass sie in Makefiles eingebaut werden. [3] Ein Beispiel dafür: X11's makedepend (man makedepend).