GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum sind Makefiles in Linux so nützlich?

Der normal way für Linux ist die Verwendung einer Make-Datei.

Es ist aus all den Fehlern entstanden, die Menschen beim Kompilieren immer komplexerer Anwendungen von Hand oder mit selbst erstellten Skripten gemacht haben. Es ist nicht trivial, Build-Abhängigkeiten für ein komplexes Projekt darzustellen. Make bietet einfach einen standardisierten Weg, um solche Abhängigkeiten anzugeben, und ein Tool, um die Abhängigkeiten zu parsen und zugehörige Build-Aktionen auszuführen.

Sogar Benutzeroberflächen, die den Build-Prozess für Sie vereinfachen/automatisieren, verwenden eine Make-Datei oder etwas Ähnliches hinter den Kulissen.

AKTUALISIEREN

Für diejenigen, die sich über den Automake-Kommentar wundern, hier zwei unterschiedliche Ansichten zu diesem Thema

http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool

http://www.scurrilous.com/blog/archives/2005/08/23/i-hate-automake/


Makefiles erledigen so viel Arbeit für Sie und sind häufig leistungsfähiger, als die Leute glauben. Nehmen Sie das folgende einfache Makefile

 all: helloworld

das ist eine Zeile, und (zumindest gnu make) würde wissen, dass cc -o helloworld helloworld.c ausgeführt werden muss Wenn das Projekt dann wächst, fügen Sie eine weitere Regel hinzu:

helloworld: ui.o xml.o mailcomponent.o
   $(CC) $(CFLAGS) -o [email protected] [email protected] $^

und make weiß zu laufen

cc -c ui.c
cc -c xml.c
cc -c mailcomponent.c
cc -o helloworld helloworld.c ui.o xml.o mailcomponent.o

Sagen Sie dann, dass Sie alles optimieren möchten.

CFLAGS=-O2

am Anfang der Datei kümmert sich um Sie.

Wenn das Projekt größer wird, verfolgt make die Dateien, die sich geändert haben und die nicht geändert wurden, und verhindert so überflüssige und zeitraubende Neukompilierungen.

Makefiles sind wunderbare Zeitsparer, und ich habe noch nicht einmal fortgeschrittenere Rezepte angesprochen.


Linux
  1. Warum ich bei xterm bleibe

  2. Warum sind harte Links zu Verzeichnissen in Unix/Linux nicht erlaubt?

  3. Wann ist setsid() nützlich oder warum müssen wir Prozesse in Linux gruppieren?

  4. Warum sind die meisten Linux-Programme in C geschrieben?

  5. Warum werden sowohl `make clean` als auch `make mrproper` verwendet?

Erstellen Sie einen Kali Linux Persistent USB

Die 10 wichtigsten Gründe für die Verwendung von Linux

Wie man eine Datei unter Linux ausführbar macht

Warum Nerds Linux verwenden

Linux – Warum sind wahr und falsch so groß?

12 Nützliche Beispiele für Linux-Datumsbefehle