Antworten:
Aus der Kernel-Konfiguration und dem Erstellen in Linux 2.5 (der Abschnitt, den ich zitiere, befasst sich mit Änderungen, die in 2.5 / 2.6-Kerneln vorgenommen wurden):
Kompilieren von integrierten Objekten und Modulen in einem einzigen Durchgang, Erkennen geänderter Befehlszeilenargumente [...]
Das Hauptleistungsproblem für den Kernel-Build sind die Aufrufe von make (die meiste Zeit wird natürlich normalerweise für das Kompilieren / Verknüpfen aufgewendet, aber diese Kosten sind unabhängig vom verwendeten Build-System). make muss die lokale Make-Datei, die allgemeinen Regeln und alle Abhängigkeiten lesen und die von dort aus zu erledigende Arbeit herausfinden. Ein offensichtlicher Weg, um die Leistung des Build-Systems zu optimieren, besteht darin, unnötige Aufrufe zu vermeiden. [...]
Es wurde ein flexibleres Schema für den Umgang mit sich ändernden Befehlszeilen innerhalb von GNU make erstellt. Die eigentliche Verwendung ist ziemlich einfach. Anstatt den Befehl direkt in den Befehlsteil der Regel zu schreiben, wird er stattdessen der Variablen zugewiesen,
cmd_link_l_target
und das Build-System kümmert sich bei Bedarf um die Ausführung des Befehls und verfolgt die Änderungen an der Befehlszeile selbst . Die Implementierung funktioniert wie folgt. Nach dem Ausführen des Befehls zeichnet das Makroif_changed
die Befehlszeile in der Datei auf.<target>.cmd
. Wenn make während einer Neuerstellung erneut aufgerufen wird, werden diese.*.cmd
Dateien eingeschlossen. Wenn es versucht zu entscheiden, ob es neu erstellt werden sollL_TARGET
, findet esFORCE
in den Voraussetzungen, was es tatsächlich zwingt, den Befehlsteil der Regel immer wieder auszuführen.
Grundsätzlich handelt es sich hierbei um eine Optimierung der Kernelkompilierung. Diese Dateien werden verwendet, um zu verhindern, dass sie make
bei Bedarf zu viel arbeiten. Wie Sie oben lesen können, ist eine some_name.o.cmd
Datei vorhanden, um zu verfolgen, was bereits getan wurde / getan werden muss, wenn es um die Zusammenstellung von geht some_name.o
.
Weitere Informationen finden Sie in Abschnitt 4.5 des zuvor verlinkten Dokuments ( Was ist neu in Linux-2.5 / 2.6s kbuild? ).