2013-05-03 15 views
5

Ich arbeite daran, ein riesiges rekursives Makefile-Projekt zu modifizieren, das mehr als 6000 Quelldateien enthält. Alle sind übersichtlich gesteuert. Da ich nicht den gesamten Quellbaum kopieren möchte, versuche ich ein neues Projekt zu erstellen, das nur die geänderten Quelldateien enthält und ziehe somit die Quelle aus dem Originalbaum, wenn sie nicht in meinem modifizierten Baum vorhanden ist.Wie make aus einem Verzeichnis erstellen, wenn die Quelldatei vorhanden ist, andernfalls aus einem anderen erstellen?

Dir Structure

ich geändert habe bereits die Make-Datei in ModDir wenn jeder Ordner lokal zu überprüfen, und führen Sie existiert in diesem Ordner machen, wenn es funktioniert. Sonst führt es make in der sourceDir aus. Mein Problem liegt in den Unterdir Makefiles.

Jedes Unterverzeichnis Makefile enthält eine Liste aller für dieses Modul erforderlichen Quelldateien. Ich muss einen Weg finden, um die Datei lokal zu erstellen, wenn sie existiert, sonst baue die Datei von SourceDir/subdir.

I.e. In meinem Image muss das Dir1 Makefile F1 von ModDir/Dir1/F1 erstellen und die anderen Dateien von SourceDir/Dir1/F2-F3 erstellen.

Ich versuchte, VPATH zu verwenden, um zu sagen, um die Quelldateien an beiden Orten zu finden (ModDir zuerst natürlich), die wunderbar funktioniert. Da make jedoch davon ausgeht, dass sich die Objektdateien in der ModDir befinden, kann es keine der Objektdateien finden, die in SourceDir erstellt wurden.

Ich habe auch versucht, eine Pre-Build-Regel zu machen, um die make-Datei-Liste mit bash zu ändern, aber ich weiß nicht, ob das überhaupt möglich ist.

Wie verwende ich make, um aus einem Verzeichnis zu erstellen, wenn die Quelldatei existiert (ModDir), ansonsten von einem anderen (SourceDir) zu erstellen?

+0

„calling [Make kann keine der in 'SourceDir' erstellten Objektdateien finden." Es ist wahrscheinlich am besten, diese Dateien überhaupt nicht zu verwenden, da die neuen Makefiles strenggenommen nicht in der Lage sind, sie zu erstellen. – Beta

+3

Können Sie 'ModDir' nicht mit symbolischen Links zu den fehlenden Quelldateien füllen? Oder machen Sie sogar einen dritten Baum, der aus symbolischen Links besteht, zu Dateien in 'SourceDir' und' ModDir'. – bobbogo

+0

Ja, ich könnte Symlinks verwenden, aber ich möchte ModDir nicht überladen. Für den Moment habe ich den vollständigen Pfad in jedem ModDir-Makefile zu jeder Datei in SourceDir hinzugefügt. Das funktioniert gut, aber ich hatte gehofft, den Prozess zu automatisieren. – SPARCpenguin

Antwort

1

Der einfachste Weg, wird Ihr zu setzen "wenn ... dann ... else" Logik in einem externen bash oder Batch (je nachdem, was OS Sie verwenden) Skript und Swap makefile s vor make

Verwandte Themen