Makefile und Abhängigkeiten in Headern
-
Ich versuche gerade meinen ersten Unit Test mit google Test aufzusetzen und komme dadurch in die Verlegenheit auch zum ersten Mal ein Makefile zu erstellen. Ich habe soweit auch erstmal alle Fehlermeldungen ausgemerzt aber komme nun doch nicht so recht weiter.
Ich möchte eine Klasse A.cpp mit zugehörigem Header A.h testen. Nun included A.h allerdings Header B.h der zu allem Überfluss in einer parallelen Ordnerstruktur liegt (/coding/haupt/A.h /coding/neben/B.h). Wenn ich mein make jetzt ausführe bekomme ich folgerichtig die Fehlermeldung das die in A.h inkludierte B.h nicht gefunden werden kann.
Google konnte mir bislang nicht weiterhelfen, daher frage ich nun hier. Wie muss ich das in Make definieren das diese Abhängigkeit korrekt gelöst wird?Die Betreffende Zeile in Make die den Fehler verursacht sieht bislang so aus:
A.o : $(USER_DIR)/A.cpp $(USER_DIR)/A.h $(GTEST_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/A.cpp
-
Du musst den CPPFLAGS den passenden Includesuchpfad hinzufügen.
-
Ok, ich habs mal naiv versucht, klappt aber leider nicht.
CPPFLAGS sieht bislang so aus:
CPPFLAGS += -I$(GTEST_DIR)/includeIch habe jetzt folgende Zeile hinzugefügt
CPPFLAGS += -I$(SUB_DIR)Es bleibt aber beim gleichen Fehler.
Vielleicht zur Erläuterung. SUB_DIR habe ich belegt mit ../../System/Handler. Darin liegt die .h Datei die ich brauche. Diese wird im entsprechenden Header inkludiert als include "System/Handler/B.h"
Muss ich jetzt als Pfad in CPPFLAGS nur ../.. oder ../../System/Handler einbauen?
-
ok, ich habe es ../../ reicht aus.
Aber ich habe ein anderes Problem festgestellt. Die zu testende Datei wurde unter Win geschrieben, daher sind die Includes mit Backslah definiert. Getestet werden soll nun aber gerade unter eine Linux Shell, daher sind Verzeichnisse mit Slah getrennt. Kann ich da irgendwas tun oder ist das ein unlösbares Problem?
-
Windows kommt mit normalen Slashes bestens aus.
Und ../.. deswegen, weil Du System/Handler ja eh in Deiner Include-Direktive angibst. Das wird dann eben relativ zu ../.. gemacht.