【Linux】make/Makefile & Fortschrittsbalken-Applet

Inhaltsverzeichnis

1. Make/Makefile verstehen

2. Beispielcode

1. Abhängigkeit

2. Prinzip

3. Projektbereinigung

4. Testerklärung

3. Das erste kleine Programm von Linux – Fortschrittsbalken

spiel.h

spiel.c

test.c

Ausführliche Erläuterung des Verfahrens


 

1. Make/Makefile verstehen

Ob man Makefiles schreiben kann oder nicht, zeigt einerseits, ob eine Person in der Lage ist, große Projekte abzuschließen.

Die Quelldateien in einem Projekt werden nicht gezählt. Sie werden je nach Typ, Funktion und Modul in mehreren Verzeichnissen abgelegt. Das Makefile definiert eine Reihe von Regeln, um anzugeben, welche Dateien zuerst kompiliert werden müssen, welche Dateien später kompiliert werden müssen. und welche Dateien neu kompiliert werden müssen. Kompilieren und sogar komplexere Funktionsoperationen ausführen

Der Vorteil von Makefile ist die „automatische Kompilierung“. Sobald es geschrieben ist, ist nur ein Make-Befehl erforderlich, und das gesamte Projekt wird vollständig automatisch kompiliert, was die Effizienz der Softwareentwicklung erheblich verbessert.

Make ist ein Befehlstool, das die Anweisungen im Makefile interpretiert. Im Allgemeinen verfügen die meisten IDEs über diesen Befehl, z. B. make von Delphi, nmake von Visual C++ und make von GNU unter Linux. Es ist ersichtlich, dass Makefile zu einer Kompilierungsmethode im Engineering geworden ist.

Make ist ein Befehl und makefile ist eine Datei. Sie werden zusammen verwendet, um die automatisierte Erstellung des Projekts abzuschließen.

2. Beispielcode

Im Allgemeinen erstellen wir ein ausführbares Programm wie folgt:

Heute verwenden wir make/makefile zur Implementierung;

Der Name der erstellten Datei muss der erste Buchstabe des Makefiles sein. Er kann Groß- oder Kleinbuchstaben sein;

Geben Sie den Befehl make wie folgt direkt ein und die ausführbare Datei wird automatisch erstellt, was sehr praktisch ist.

1. Abhängigkeit

Die obige Datei mybin, die von game.o abhängt

game.o , was von game.s abhängt

game.s , was von game.i abhängt

game.i , das von game.c abhängt

2. Prinzip

So funktioniert make standardmäßig, das heißt, wir geben nur den make-Befehl ein. Also

1. make sucht im aktuellen Verzeichnis nach einer Datei mit dem Namen „Makefile“ oder „makefile“.

2,Wenn gefunden, wird die erste Zieldatei (Ziel) in der Datei gefunden. Im obigen Beispiel wird „mybin“ dieser Datei und verwenden Sie diese Datei als endgültige Zieldatei.

3,wennmybinDatei nicht existiert, oder Spiel.o-Datei, von der >mybin abhängt, ist länger als . zum Testen verwenden), dann wird sie ausgeführt Was wird später definiert? Befehl zum Generieren der Datei mybintouch Diese Datei ist neu (Sie können mybin

4,if ifhello hängt vongame ab .o-Datei nicht existiert, dann findet make das Ziel in der aktuellen Datei als < a i= 8>Die Abhängigkeit der Datei game.o. Wenn gefunden, wird die Datei game.o angezeigt nach dieser Regel generiert. . (Dies ist ein bisschen wie ein Stapelprozess) Die game.o-Datei, von der es abhängt, existiert nicht, dann makemake a> findet die Abhängigkeit der Zieldatei game.o in der aktuellen Datei. Wenn es gefunden wird, wird es gemäß dieser Regel generiert. game.o Datei. (Dies ist ein bisschen wie ein Stapelprozess)

5,Natürlich sind Sie C-Satzelement und H-Satzelement existenziell, Sie sindmachen Assoziationsgenerierunggame.o Textelement, anschließend wiederverwenden game.o Textelement Erklärung machens letzten Termin 务、也执行文品mybinabgeschlossen.

6, Dies ist die Abhängigkeit des gesamten make, make sucht Schicht für Schicht nach Dateiabhängigkeiten, bis die erste Zieldatei schließlich kompiliert ist.

7,Wenn während des Suchvorgangs ein Fehler auftritt, z. B. wenn die letzte abhängige Datei nicht gefunden werden kann, dannmake jedoch überhaupt nicht . Grund. make wird direkt beendet und meldet einen Fehler. Bei Fehlern in den definierten Befehlen oder fehlgeschlagener Kompilierung funktioniert

8, make kümmert sich nur um Dateiabhängigkeiten, das heißt, wenn die Datei nach dem Doppelpunkt immer noch nicht da ist, nachdem ich die Abhängigkeiten gefunden habe, dann tut mir leid, ich habe gewonnen Funktioniert nicht.

3. Projektbereinigung

Das Projekt muss bereinigt werden

Wenn es wie clean nicht direkt oder indirekt mit der ersten Zieldatei verknüpft ist, werden die danach definierten Befehle nicht automatisch ausgeführt. Wir können jedoch zeigen, dass make ausgeführt wird. Das heißt, der Befehl „make clean“ wird verwendet, um alle Zieldateien für die Neukompilierung zu löschen.

Aber im Allgemeinen legen wir unsere sauberen Zieldateien als Pseudoziel fest und ändern es mit .PHONY. Das Merkmal des Pseudoziels ist, dass es immer ausgeführt wird.

Sie können unsere mybin-Zieldatei als Pseudoziel deklarieren und testen.

4. Testerklärung

Die oben genannten Prinzipien sind allesamt Prinzipien für die Basisebene. Es gibt viele Wörter, die für ein eingehendes Studium geeignet sind. Jetzt machen wir es einfach;

mybin: game.c ist eine Abhängigkeit, mybin ist die von game.c gebildete ausführbare Datei, aber wie sie konkret implementiert wird, hängt von der Methode ab, gcc game.c -o mybin ist die Abhängigkeitsmethode;

Und gcc game.c -o mybin kann auch als gcc -o $@ $^ geschrieben werden;

$@ bedeutet mybin, $^ bedeutet game.c

Es hat den gleichen Effekt und ist bequemer. Es wird empfohlen, Letzteres zu verwenden.

.PHONY bedeutet, dass die Datei in eine Pseudodatei umgewandelt wird. Das Merkmal der Pseudodatei ist, dass sie immer ausgeführt wird.

Am besten tragen Sie unten clean ein, damit das Programm immer ausgeführt und bereinigt wird;

Wenn wir immer make ausführen, ist letzteres ungültig, da die Änderungszeit von mybin langsamer ist als die Änderungszeit von game.c.

Die oben gezeichnete rote Linie stellt die Änderungszeit dar. Mybin ist langsamer als game.c, daher wird make nicht ausgeführt.

Lassen Sie uns die Datei game.c ändern und einen Blick darauf werfen.

Ich habe gerade die Änderung abgeschlossen. Die Zeit von game.c ist langsamer als die von mybin.

Sie können also make ausführen. Wenn Sie es erneut öffnen, ist die Änderungszeit der mybin-Datei länger als die von game.c und make wird nicht ausgeführt.

Wir können Touch auch verwenden, um die Änderungszeit der Datei zu aktualisieren;

Wenn wir unsere mybin-Zieldatei als Pseudoziel deklarieren, testen Sie sie.

Auf diese Weise wird make jedes Mal ausgeführt, es wird jedoch nicht empfohlen, es zu verwenden, da es an sich korrekt ist. Führen Sie es nicht ohne Änderungen aus. Daran ist nichts auszusetzen. Jetzt ist unsere Datei klein und funktioniert nicht. Es spielt keine Rolle, ob es jedes Mal ausgeführt wird. Wenn unsere Datei sehr groß ist, wird es sehr zeitaufwändig sein, wenn sie jedes Mal ausgeführt wird.

clean wird zum Bereinigen von Dateien verwendet, wenn es verwendet wird, ist es make clean;

Bereinigen Sie Dateien direkt mit einem Klick;

Übrigens gibt es noch eine andere, die wir verwenden: make. Warum führt es mybin statt clean aus?

Der Befehl make wird von oben nach unten ausgeführt;

Ersetzen Sie sie der Reihe nach;

Wenn wir dann make ausführen, führen wir clean aus. Wenn wir make mybin ausführen, bilden wir die ausführbare Datei mybin. Dies geschieht von oben nach unten, und die Reihenfolge hat keinen Einfluss.

3. Das erste kleine Programm von Linux – Fortschrittsbalken

Die Brüder begannen hart zu arbeiten;

Bereiten Sie zunächst die Unterlagen vor, die Sie zu Beginn benötigen;

spiel.h

#include<stdio.h>
#include<time.h>
#include<unistd.h>

void game(double rate);
void download();

spiel.c

#include"game.h"
#define MAX 1024*1024*1024

char* buff = "|/-\\";
int i = 0;
char arr[102] = { 0 };
void game(double rate)
{
	if (rate <= 1.0)
	{
		arr[0] = '=';
	}
	printf("[%-100s][%.1lf%%][%c]\r", arr, rate, buff[i % 4]);
	fflush(stdout);
	arr[(int)rate] = '=';
	if (rate< 99.0)
	{
		arr[(int)rate+1] = '>';
	}
	i++;
}

void download()
{
	srand(time(NULL)^1023);
	int max = MAX;
	int cnt = 0;
	double rate = 0;
	while (rate<100.0)
	{
		cnt+= rand() % (1024*1024);
		rate = ((cnt*1.0)/max)* 100;
		if (rate > 100)
		{
			rate = 100;
		}
		game(rate);
		usleep(50000);
	}
}

test.c

#include"game.h"

int main()
{
	download();
	return 0;
}

Ausführliche Erläuterung des Verfahrens

Dieses Programm erstellt einen Speicherfortschrittsbalken, sei MAX die Speichergröße, die heruntergeladen werden muss, dann ist cnt der heruntergeladene Teil, rate ist der heruntergeladene Prozentsatz und übergibt ihn dann an die Spielfunktion, um den Fortschrittsbalken, die Spielfunktion, auszuführen , laut rete Die Größe wird in Prozent ausgegeben, ebenso wie das Gleichheitszeichen, und es gibt auch ein umgedrehtes Array, um festzustellen, ob das Programm hängen bleibt. Fügen Sie dann > nach dem Gleichheitszeichen hinzu, um die Ausgabe zu verschönern, bis 100 % erreicht sind, und Beenden Sie das Programm;

Supongo que te gusta

Origin blog.csdn.net/m0_71676870/article/details/134463213
Recomendado
Clasificación