Makefile ist ein häufig verwendetes Dateiformat in Linux-Systemen. Es kann zur Beschreibung des Kompilierungsprozesses und der Abhängigkeiten eines Programms verwendet werden, sodass Benutzer den Befehl make problemlos zum Erstellen und Verwalten von Programmen verwenden können. Die Vorteile von Makefile sind Einfachheit, Flexibilität und Portabilität, es weist jedoch auch einige Nachteile auf, z. B. langsame Kompilierungsgeschwindigkeit, hoher Ressourcenverbrauch und wiederholte Kompilierung. Wie kann man also die Leistung von Makefile optimieren und die Kompilierungsgeschwindigkeit und -effizienz unter Linux verbessern? In diesem Artikel werden einige Methoden zur Leistungsoptimierung von Linux-Makefiles vorgestellt, z. B. die Verwendung paralleler Kompilierung, inkrementeller Kompilierung, vorkompilierter Header-Dateien, Zwischenspeichern von Kompilierungsergebnissen usw., damit Sie Makefiles unter Linux besser verwenden und schreiben können.
1. Die Auswirkungen des Zuweisungsoperators
Wie wirken sich die beiden Zuweisungsoperatoren „:=“ und „=“ auf die Kompilierungsgeschwindigkeit aus? Das Geheimnis liegt in ihrer wesentlichen Bedeutung. Auch der Blogger hat lange nachgedacht und viele Informationen im Internet recherchiert und wurde schließlich von den Worten dieses Blogbeitrags geweckt. Bitte klicken Sie hier, um diesen Blogbeitrag anzuzeigen
-
= Zuweisungsoperator – rekursive Erweiterung – verzögerte Erweiterung
„=" bedeutet, dass das gesamte Makefile erweitert wird, bevor der Wert der Variablen bestimmt wird. Das heißt, der Wert der Variablen ist der Wert, der durch die letzte rekursive Erweiterung im gesamten Makefile angegeben wird, unabhängig davon, ob die Zwischenvariable darauf verweist vor oder nach der Ausführung der Zielregel.
Beispiele sind wie folgt:
foo = $(bar)
bar = $(ugh)
ugh = $(Huh)
all:
@echo $(foo)
Huh = AfterTarget
Nach dem Login kopieren
make之后其结果为 : AfterTarget
其整个执行过程如下:
首先“$(foo)”被替换为“$(bar)”,
接下来 “$(bar)”被替换为“$(ugh)”,
“$(ugh)”被替换为“$(Huh)”,
最后$(Huh)被替换为“AfterTarget”。
整个替换的过程是在执行“echo $(foo)”是进行的。
Nach dem Login kopieren
Hinweis: Der gesamte Ersetzungsprozess wird durchgeführt, wenn „echo $(foo)“ ausgeführt wird.
-
:= Zuweisungsoperator – direkte Erweiterung – sofortige Erweiterung
„:=" bedeutet, dass der Wert der Variablen durch ihre Position im Makefile bestimmt wird und nicht durch den Endwert, nachdem das gesamte Makefile erweitert wurde. Wenn dieser Zuweisungsoperator zum Definieren einer Variablen verwendet wird, wird der Verweis auf eine andere Variable oder Funktion im Variablenwert bei der Definition erweitert, d. h. bei der Definition ist die Variable bereits der Endwert ihres Ausdrucks.
Beispiele sind wie folgt:
x := foo
y := $(x) bar
x := xyz
Nach dem Login kopieren
Im obigen Beispiel ist der Wert von y foo bar statt xyz bar.
Das Obige ist die grundlegende Beschreibung dieser beiden Zuweisungsoperatoren. Im Folgenden finden Sie eine detaillierte Beschreibung, wie sie sich auf die Kompilierungsgeschwindigkeit auswirken!
Beispiele sind wie folgt:
TmpDir = /Source #此处随意定义了一个目录,
#但切记在实际编写的 Makefile 中,不要在赋值语句后面写注释,
#否则会把 /Source 到 # 之间的空格也算进去的。
#在下面引用该变量的时候实际上‘/Source_’最后还多了一个空格
#为了表示清楚,我用下划线表示空格,这样的目录肯定是不存在的
#以下语句调用了Shell函数,其结果是把指定目录下的所有源文件赋值给 x 变量,
#两者取其一运行make
#x := $(shell cd $(TmpDir); ls *.c)
x = $(shell cd $(TmpDir); ls *.c)
all:
@echo $(x)
@echo $(x)
@echo $(x)
Nach dem Login kopieren
-
:= ist eine unmittelbare Variablenzuweisung, der Wert wurde bei der Definition bestimmt. Beim Ausführen von make wird der Wert von
= ist eine verzögerte Variablenzuweisung, die nur erweitert wird, wenn die Variable verwendet wird. Beim Ausführen von make wurde der Wert von x bei der Definition nicht erweitert, daher wurde @echo $(x) dreimal ausgeführt und die Shell-Funktion jedes Mal aufgerufen. Schließlich wurde die Shell-Funktion dreimal aufgerufen
- Durch den obigen Analyseprozess sollten Sie eine klare Vorstellung davon haben, wie sich diese beiden Operatoren auf die Kompilierungsgeschwindigkeit auswirken.
Durch diesen Artikel sollten Sie über ein grundlegendes Verständnis einiger Methoden zur Leistungsoptimierung von Linux Makefile verfügen und wissen, wie Sie die Kompilierungsgeschwindigkeit und -effizienz verbessern können, z. B. die Verwendung paralleler Kompilierung, inkrementeller Kompilierung, vorkompilierter Header-Dateien, Zwischenspeichern von Kompilierungsergebnissen usw. Sie sollten auch die Prinzipien und Auswirkungen der Makefile-Leistungsoptimierung verstehen und wissen, wie Sie diese Methoden unter Linux richtig verwenden und konfigurieren. Wir empfehlen Ihnen, bei der Verwendung von Makefile die geeignete Methode zur Leistungsoptimierung basierend auf Ihrem eigenen Projekt und Ihren Anforderungen auszuwählen, um die Build-Qualität und Geschwindigkeit des Programms zu verbessern. Gleichzeitig erinnern wir Sie auch daran, bei der Verwendung von Makefiles auf einige potenzielle Probleme und Herausforderungen zu achten, wie z. B. Kompatibilität, Stabilität, Wartbarkeit usw. Ich hoffe, dieser Artikel kann Ihnen dabei helfen, das Linux-System besser zu nutzen und die Vorteile und den Komfort der Makefile-Leistungsoptimierung unter Linux zu genießen.
Das obige ist der detaillierte Inhalt vonLeistungsoptimierung von Linux Makefile: So verbessern Sie die Kompilierungsgeschwindigkeit und -effizienz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!