Baudat schrieb:
> Rolf M. schrieb:
>> Es wird vermutlich eine vordefinierte Regel angewendet. Gibt es denn
>> eine opengl.h? Die ist für deine Regel ja erforderlich.
>
> Tatsächlich sie existiert nicht. Ich dachte make würde das dann einfach
> hinnehmen, dass diese fehlt.
Nein, Abhängigkeiten sind bindend. Wenn davon eine nicht existiert,
sucht make nach einer Regel, um sie zu erzeugen oder nach einer, die
diese Abhängigkeit nicht hat. Wenn's keine gibt, bricht make mit Fehler
"no rule to make target" ab.
Wozu sollte man denn auch überhaupt eine Abhängigkeit angeben, wenn make
sie dann einfach ignorieren würde?
> Da ich alle Headerfiles unter $(DEPS) eingetragen habe, heißt das ja
> zwangsläufig, dass wenn ein Header bearbeitet wurde das ganze Projekt
> neu gebaut werden muss.
Ja.
> Gibt es eine Möglichkeit das zu verhindern, außer für jede .cpp Datei
> eine eigene Regel aufzustellen?
Es gibt die Möglichkeit, diese Regeln durch gcc automatisiert erstellen
zu lassen. Der bietet dazu den Kommandozeilenparameter -M und dessen
Verwandten.
Siehe auch
https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/Preprocessor-Options.html#Preprocessor-Options
Damit kann man sich ein zusätzliches Makefile erzeugen, das nur alle
Header-Abhängigkeiten enthält. Das kann man dann im eigenen Makefile per
include einbinden. Die automatische Aktualisierung dieser
dependancy-Files kann man dann wiederum per Make-Rule durchführen
lassen.
Ich hab mal kurz eine Seite dazu ergoogelt, die's soweit ich sehen kann
ganz gut erklärt und auch zeigt, wie das Makefile dann aussehen sollte:
http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/