staging.inyokaproject.org

Makefile Regel für Objektdateien in verschiedenen Ordnern

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

TheIntruder

Avatar von TheIntruder

Anmeldungsdatum:
26. Juni 2011

Beiträge: Zähle...

Ich habe folgendes Problem. Ich brauche ein Makefile, welches eine Regel für Objekte enthält. Das Problem aber ist, dass das Projekt Unterprojekte hat. Die Sourcedateien haben dabei folgende Ordnerstruktur /src/*.cc /src/*/*.cc /src/<SubProject>/src/*.cc

Die Objektdateien sollen dabei in andere Unterordner erstellen, nämlich der Art, dass jedes "/src/" durch ein "/build/objs/" ersetzt werden soll /build/objs/.o /build/objs/*.o /build/objs/<SubProject>/build/objs/*.o

So sieht meine Regel der Zeit aus:

1
2
3
4
5
6
7
8
9
$(BUILD_DIR_NAME)/$(OBJS_DIR_NAME)/%$(OBJ_SUFFIX): $(SRC_DIR_NAME)/%$(CC_SUFFIX) $(SRC_DIR_NAME)/%$(HH_SUFFIX) $(SRC_DIR_NAME)/*/%$(CC_SUFFIX) $(SRC_DIR_NAME)/*/%$(HH_SUFFIX) $(SRC_DIR_NAME)/*/*/%$(CC_SUFFIX) $(SRC_DIR_NAME)/*/*/%$(HH_SUFFIX) $(SRC_DIR_NAME)/*/*/*/%$(CC_SUFFIX) $(SRC_DIR_NAME)/*/*/*/%$(HH_SUFFIX)
	@mkdir -p $(BUILD_DIR_NAME)/$(OBJS_DIR_NAME)
	$(CC) -c $(CMD) $<
	
$(EXECUTABLE): $(OBJECTS)
	@mkdir -p $(dir $(EXECUTABLE))
	ccache -F 0 && ccache -M 0
	$(CC) -o $@ $^ $(CMD)
	ccache -s

Wie mache ich das?

Herbststurm

Anmeldungsdatum:
27. Mai 2011

Beiträge: Zähle...

Hallo

Google mal nach rekursivem Make. http://www.ijon.de/comp/tutorials/makefile.html#rekursiv

Grüße

TheIntruder

(Themenstarter)
Avatar von TheIntruder

Anmeldungsdatum:
26. Juni 2011

Beiträge: Zähle...

Herbststurm schrieb:

Hallo

Google mal nach rekursivem Make. http://www.ijon.de/comp/tutorials/makefile.html#rekursiv

Grüße

Danke dafür, aber es funktionierte aus irgendeinem Grund nicht. Mal ne verwandte Frage

objectrule2: ...
objectrule1: ...
objectrule0: ...

wobei objectrule2 eben die Objekte für ein Verzeichniss bauen, objectrule1 für das nächste, usw.. Nun müssen eben alle objectrules auch aufgerufen werden. In meinem Beispiel, dass ich nun gebaut habe, wird nur objectrule2 aufgerufen.

Bearbeitet von sebix:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!

Antworten |