Die automatische Erkennung der Abhängigkeiten C
Bin ich verpflichtet zu schreiben, die Dokumentation für mein Aktuelles Projekt, Listen alle .in c-Dateien und Listen jede .h-Datei, die direkt oder indirekt enthalten ist, die Datei.
Dies ist ein großes Projekt, und zwar haben wir Makefiles die theoretisch über diese Informationen verfügen, diese Makefiles sind manchmal falsch (wir geerbt haben dieses Projekt von einer anderen Firma). Wir haben oft zu tun hatte make clean ; make
für unsere änderungen eigentlich spiegelt sich in der Neukompilierung, so dass ich nicht wollen, verlassen sich auf diese Makefiles.
Gibt es also ein tool, das ermöglicht es uns, geben Sie den Namen ein .c-Datei und eine include-Pfad und haben es uns sagen alle .h-Dateien, die direkt oder indirekt eingebunden durch die .c-Datei? Wir haben nichts komisch wie
#define my_include "some_file.h"
#include my_include
also das tool muss nicht perfekt sein. Alles, was gesucht wird .c und .h-Dateien im include-Pfad für den regulären umfasst wäre gut genug.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem, was ich in meinem Makefile ist
Dies bedeutet, dass, wenn eine der source-Dateien aktualisiert werden, die davon abhängen, wird die Regel ausgeführt, und verwenden Sie gcc -M aktualisieren Sie die Datei " abhängen. Diese wird dann in das makefile um die Abhängigkeit der Regeln, die für alle Quell-Dateien.
Machen wird prüfen, ob eine Datei aktuell ist, bevor es, so das ab-Regel wird ausgeführt, wenn immer dann erforderlich, wenn Sie ausführen sollten, ohne dass Sie benötigen, zu tun, ein "make depend".
Dieser wird eine beliebige Zeit eine Datei geändert hat. Ich habe noch nie festgestellt das ein problem, aber wenn Sie hatte eine große Anzahl von Dateien in dem Verzeichnis, das Sie finden könnten, es dauerte zu lange, in dem Fall könnten Sie versuchen, mit einer dependency-Datei pro Quelle-Datei wie diese:
Beachten Sie, dass Sie verwenden können,- MM statt -M nicht-system-Header.
-M
wird unkritisch Liste alle Header in der include-trail, egal, ob Sie von Ihrer Datei oder nicht. Zum Beispiel, wenn Ihresrc.c
umfasstfoo.h
undbar.h
aber wirklich nur brauchtbar.h
,-M
/-MM
noch Liste sowohlfoo.h
undbar.h
als Abhängigkeiten. Ich würde gerne einen Weg finden, um dieses, um das portieren von code zu erleichtern."gcc -M-Datei.c" tut, was Sie brauchen.
Alternative zu gcc -M ist fastdep. Fastdep die Berichte fastdep zu zehn mal schneller als gcc -M. Wenn das Projekt dauert eine Weile, um zu bauen, fastdep kann einen Blick Wert sein.
Nutzen SCons
In MSVC (2005 und 2008 mindestens, evtl. auch andere Versionen als gut, aber nicht VC6) Sie können den compiler zu sagen, Sie alle Dateien, die aufgenommen wurden, während der Kompilierung. Die Ausgabe ist Recht ausführlich, aber komplett und relativ einfach zu analysieren mit menschlichen Augen.
In den Projekt-Einstellungen, gehen Sie zu C/C++ - >Registerkarte "Erweitert", und wählen Sie "Show Beinhaltet", dann erstellen Sie Ihr Projekt neu aus dem Boden auf.