Ist "g++ -MMD" besser als eine absuche?
Während der Suche auf build-Systeme, viele von Ihnen (SCons, bjam, cmake, Tundra, etc.) haben einen eingebauten #include-scanner. Noch gcc & icc bieten eine -MMD
(oder -MD
) option, die Ausgänge sind die Namen der header-Dateien der C++ - Datei abhängig ist.
Den -MMD
option Abhängigkeit scheint zuverlässig zu sein. Wenn Sie fügen Sie eine #include
um eine C-Datei, deren Zeitstempel ändern würde, so dass das build-system würde es neu kompilieren. Wenn Sie fügen Sie eine #include
um eine header-Datei, deren Zeitstempel ändern würde, und es würde neu kompilieren alle betroffenen C-Dateien.
Gehören scanning-Systeme zu brechen, aber -MMD
scheint mir robust. Welcher ist der beste, und warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
-MMD
ist am besten, aus den Gründen, die Sie zu geben und vieles mehr.Immer die compiler-Ausgabe Abhängigkeiten als Teil der normalen Kompilierung sichergestellt, dass die exakt gleiche set von compiler-Optionen wie
-I
Pfade und Makros sind in der Tat bei der Zusammenstellung und bei der Suche nach Abhängigkeiten. Das ist weniger redundant und weniger fehleranfällig als die Gewährleistung des gleichen Optionen verwendet werden, für die zwei separate Werkzeuge.-MD
nicht vollständige Pfadnamen, z.B.foo.o:
stattdir1/dir2/foo.o
-M
Familie von Optionen, die eher die organisation des user-Projekt.-M
ist hier erwähnenswert.-M
eher als eine Falle der Aufnahme in die Liste Voraussetzung Header in makefile überhaupt. Würden Sie nicht genau das gleiche problem, wenn Sie aufgeführt header Voraussetzungen in der make-Datei manuell? Hinzufügen eines zweiten<foo.h>
ist wahrscheinlich zu brechen, Ihre Zusammenstellung komplett, und wenn es nicht dann mit-MMD
nicht "brechen" nichts, es bedeutet einfach, dass die Voraussetzung falsch ist, bis der compiler wird ausgeführt, auf die Quell-Datei erneut.