"divide et impera" - teile und herrsche
Besser als alles in eins zu wurschteln, betrachte die bisherigen
Projekte als Subsysteme des neuen Gesamtprojektes.
Setze also Quell- u. Objektfilelisten, Pfadlisten (-I), Verzeichnisse
(Quell-, Libs-, Objekt-), Kompiler- u. Linkoptionen usw. separat fuer
die verschiedenen Buildabschnitte - z.B. in Abschnittspezifische
Variablen.
Erst in den jeweiligen Abschnitte weist Du die fuer diesen Abschnitt
gültigen Variablen den Standard-Makevariablen.
Ev. passt Du die einzelnen Wekzeugaufrufe welche als generische
Variablen (z.B. CC, LD, usw.) vorliegen halt deinem allg.gültigen Muster
an (also mit zus. Platzhaltervariablen welche Deinen Bedürfnisse
dienen).
Achtung: rekursive Aufrufe von make (z.B. Aus einem übergeordneten
Makefile) gehen, birgt aber spezifische Probleme.
Eines davon ist dass die erste aufgerufene make-Instanz nicht alle
Abhängikeiten bis in die Tiefe "zu Gesicht" bekommt, sodass es seine
Hauptaufgabe "Abhängigkeiten auflösen" nicht erfüllen kann. Negative
Auswirkung davon sind auch Änderungen nicht mitbekommen und nicht
passend (genug) nachkompilieren/linken UND nicht parallelisieren können
(make option "-j"). Bei stundenlangen Builds IST dies relevant, oder
nicht alle Kerne die man hat bekommen soviel zu tun wie es möglich wäre.
Jetzt sind die unabhängigen Projekte noch richtig unabhängig
voneinander (der Systemarchitekt sagt "lose gekoppelt").
Nur weil man sie in einem Projekt gemeinsam benutzt, heisst dies nicht
dass diese lose Koppelung zu verwerfen ist und durch enge Koppelung
alles in eine Presswurscht kommen muss.
Behalte also die Modularisierung und die internen Schnittstellen im
neuen Gesamtprojekt im Auge: diese Aufteilung wiederspiegelt sich in der
#include-Hierarchie und auch in der Makefilegestaltung.
Hilfreich dies zu bewerten, ist dazu Doxygen auf den Code loszulassen
und Diagramme zur Importhierarchie generieren zu lassen: auf diesen
Bilder erkennt man gut wenn von "Weither" ganz "Lowlevel" Includes
geholt werden und sonstwie "Pfeile kreuz und quer" gehen.