Ich habe etwa 10 Quelldateien (. C) mit Kopfzeilen (. H). Nur zwei Quelldateien (.c) sind in ausführbare Dateien (ELF) verknüpft und enthalten die Hauptfunktion. Die meisten Dateien werden in Objekte (.o) kompiliert und (neu) (statisch verknüpft) mit den ausführbaren Dateien verwendet.GNU make und Liste der Objekte
Ich habe versucht, eine allgemeine Regel zu definieren alle Objekte zu bauen:
%.o : %.c
$(CC) $(CCFLAGS) -c -o [email protected] $<
Dies funktioniert gut für die in Objekte zusammengestellt Quellen. Ich muss mich nicht jedes Mal darum sorgen, die Datei make zu aktualisieren, wenn ich eine neue Quelldatei hinzufüge.
Aber ich weiß nicht, was wäre der beste Weg, um Regeln zum Erstellen ausführbarer Dateien zu erstellen?
exec1 : object1.o object2.o object3.o
call the linker
exec2 : object1.o object2.o object4.o object5.o
call the linker
Dies wird funktionieren; aber wenn ich eine neue Kopfzeile (foo.h) hinzufügen werde, muss ich auch daran denken, die Liste der Objekte für diese Regel zu aktualisieren (foo.o hinzufügen).
Gibt es irgendeine Möglichkeit, die erforderlichen Objekte für ein bestimmtes Ziel (möglicherweise basierend auf den enthaltenen Header-Dateien) automatisch auflösen könnte?
Gibt es eine bessere Möglichkeit, das Ziel für eine ausführbare Datei zu definieren?
Hinweis: Ich kann keine Platzhalter verwenden, da nicht alle ausführbaren Dateien alle Objekte benötigen. Oder könnte Linker überflüssige Objekte entfernen?
Danke!
Die Art, wie Sie für die ausführbare Datei angegeben haben, ist in Ordnung, normalerweise würde ein neues Header-Objekt die C-Quelle ändern, die sie enthält. – dvhh
Durch die explizite Regel zum Generieren der Code-Objektdatei, ist auch eine Standard-GNU-Make-Regel und andere Make-Variante – dvhh
Die kurze Antwort auf Ihre spezifische Frage ist nein, es gibt keine Möglichkeit für make, automatisch zu erraten, die Objekte in einem sein sollten ausführbar basierend auf den Header-Dateien in der Quelle. – MadScientist