Für ein Projekt von mir ich automatisch am Makefiles und einschließlich ihnen, wie diese zu erzeugen:erzeugt einschliessen Make-Datei ohne Warnmeldung
all:
@echo 'SUCCESS is $(SUCCESS)'
clean:
rm depend.mk
depend.mk:
@echo 'Creating [email protected]'
@echo 'SUCCESS := 1' > [email protected]
.PHONY: all clean
include depend.mk
Dies funktioniert, aber die sind Linie eine Warnmeldung:
$ make
Makefile:13: depend.mk: No such file or directory
Creating depend.mk
SUCCESS is 1
Ich möchte die erste Warnzeile sagen, dass depend.mk nicht existiert. Ich weiß, dass es nicht existiert, da ich eine Regel geschrieben habe, um es zu generieren, also ist die Warnung unnötig (es sei denn natürlich, es gibt keine Regel dafür). Ich möchte NICHT machen, um den Fehler zu ignorieren, wo die enthaltene Datei nicht existiert und es keine Regel dafür gibt, so dass include
mit einem -
vorangestellt wird, um den Fehler zu ignorieren, funktioniert für mich nicht. Ich möchte etwas Ähnliches wie bash's Konvention von Piping stderr zu/dev/null wie some_cmd 2>/dev/null
, aber für die Einbeziehung in make.
Das obige Beispiel ist ein sehr vereinfachtes Beispiel für diesen Fall. In meinem aktuellen Projekt werden viele automatisch generierte Makefiles (über die automatische Abhängigkeitsgenerierung von clang) eingebunden, was bedeutet, dass ein neuer Lauf von make
meinen Bildschirm mit diesen Warnmeldungen überfluten wird.
Ist so etwas möglich, oder muss ich mich nur mit den lästigen Warnmeldungen herumschlagen?
Die Clang automatische Abhängigkeitsdateien haben bestimmte Regeln für sie? Sie werden nicht als Nebeneffekte der Kompilierung generiert? –
@EtanReisner Sie sind Musterregeln wie '$ (BUILDROOT) /% .d: $ (CURTOP) /% .c' wo das Rezept ist $ (CPP) $ (CPPFLAGS) -MM -MG -MT $ @ -MT $ (Basisname $ @). o -MF $ @ $ <', so dass sie generiert werden können, bevor etwas erstellt wird. – C0deH4cker
Müssen Sie sie generieren, bevor etwas gebaut wird? Verliert das nicht nur Zeit? Wenn die c-Datei kompiliert werden muss und clang sowohl die Objektdatei als auch die '.d'-Datei zur gleichen Zeit ausspucken kann, warum sollte es dann in zwei Durchläufen erledigt werden? –