Wie man ein Makefile schreibt, um ein einfaches C-Programm zu kompilieren

Lesezeit: 7 Minuten

Benutzeravatar von Zhivago
Schiwago

Kompilieren Sie das folgende Programm

#include <stdio.h>
int main(void)
{
   printf ("Hello from your first program!\n");
   return 0;
}

a)-unter Verwendung einer Datei vom Typ Makefile

b)-die ausführbare Datei heißt Hello

„Bitte helfen Sie bei einer Übung. Ich weiß, wie man das in CodeBlocks macht, aber ich weiß nicht, was Makefile ist und wie man es unter Linux schreibt. Ich habe es mit dem Befehl „gcc filename.c“ und anschließend „./“ kompiliert. a.out”, aber ich verstehe immer noch nicht, was das Makefile ist. Ist es eine Art Shell-Skript, eine Anleitung? Wie würde ein Makefile für diese Aufgabe genau aussehen? Vielen Dank im Voraus 🙂 “

  • Hast du mal versucht zu googeln Makefile-Tutorial?

    – RedX

    4. Februar 2014 um 9:31 Uhr

  • Hast du es versucht CMake-Tutorial?

    – Jegorich

    4. Februar 2014 um 10:27 Uhr

  • Aus irgendeinem Grund beteiligen sich Low-Level-Programmierer an StackOverflow, denken aber, dass dies nicht der richtige Ort ist, um gute Antworten zu geben und diejenigen zu unterrichten, die es nicht wissen, nur um zynisch zu sein und Links bereitzustellen oder vorzuschlagen, Manpages zu lesen ¯_(ツ)_/¯

    – Rafael Eyng

    19. Oktober 2017 um 0:49 Uhr

Benutzeravatar von Jayesh Bhoi
Jayesh Bhoi

Dies ist Ihre einfache Make-Datei für das Hello-Programm.

CC      = gcc
CFLAGS  = -g
RM      = rm -f


default: all

all: Hello

Hello: Hello.c
    $(CC) $(CFLAGS) -o Hello Hello.c

clean veryclean:
    $(RM) Hello

Angenommen, Sie haben zwei makefiles in einem Verzeichnis namens makefile.m1 Und makefile.m2 und wenn Sie beide Make-Dateien erstellen möchten, verwenden Sie bitte die folgenden Befehle

make -f makefile.m1
make -f makefile.m2

oder einzeln verwenden Makefile das beinhaltet:

m1:
  make -f makefile.m1

m2:
  make -f makefile.m2

und verwenden make m1 oder make m2

Lassen Sie uns nun Ihre Zweifel über den Namen der Make-Datei ausräumen, die nicht erforderlich ist Makefile

Sie können das Makefile beliebig benennen. Angenommen, ich möchte Namen geben myfirstmakefile.mk. Um es später zu verwenden, müssen Sie make mitteilen, welches Makefile Sie möchten. Verwenden Sie dazu die Option -f:

make -f myfirstmakefile.mk

Und wieder Verlängerung .mk ist auch nicht obligatorisch. Sie können verwenden, was Sie möchten, aber nie vergessen, es zu verwenden -f Möglichkeit.

Möge dies für Sie sinnvoll sein.

  • Vielen Dank. ? Mit welchem ​​Unix-Shell-Befehl haben Sie begonnen? hast du zuerst in nano Hello.c eingegeben (das Programm Hello world geschrieben und die Datei nano Hello.makefile getippt, oder was waren deine Schritte von Anfang an?

    – Schiwago

    4. Februar 2014 um 11:05 Uhr

  • Ich habe das in eine Datei mit dem Namen geschrieben mkmk mit nano und wenn ich tippte make mkmk es heißt 1make: standardmäßig nichts zu tun, aber warum

    – Schiwago

    4. Februar 2014 um 11:08 Uhr

  • Nein, unter Linux kopieren Sie einfach den obigen Code in die neue Datei mit dem Namen Makefile und auch machen Hello.c Programm im selben Verzeichnis wie oben Makefile Sie setzen. Gehen Sie jetzt vom Terminal in dieses Verzeichnis und geben Sie einfach ein make bauen Hello.c Und make clean Ausgabe zu reinigen.

    – Jayesh Bhoi

    4. Februar 2014 um 11:10 Uhr


  • Ich habe beobachtet, dass es nicht funktioniert, wenn Sie einen anderen Makefile-Namen als “Makefile” angeben. Was ist, wenn Sie zwei Makefiles erstellen müssen?

    – Schiwago

    6. Februar 2014 um 21:07 Uhr


  • Nö … es ist nicht zwingend erforderlich, den Dateinamen make anzugeben Makefile Sie können geben, was Sie wollen. Lassen Sie mich Ihre Makefile-Regeln näher erläutern. Bitte sehen Sie sich meine aktualisierte Antwort an.

    – Jayesh Bhoi

    7. Februar 2014 um 4:20 Uhr

Benutzeravatar von Jens
Jens

A makefile ist ein Rezept für die make Dienstprogramm zum Erstellen einer Datei (genannt a Ziel) aus einigen anderen Dateien (sogenannten Abhängigkeiten) mithilfe einer Reihe von Befehlen, die von der Shell ausgeführt werden. Ein Makefile sieht normalerweise so aus:

target: dependency [...]
        command1
        command2

Versuchen Sie es mit Laufen man make für Details.

Nun zu Ihrer Aufgabe, es besteht wirklich keine Notwendigkeit für ein Makefile, da make hat eingebaute Regeln, die wissen, wie man ein einfaches Programm kompiliert. Alles, was Sie tun müssen, ist, Ihre C-Quelle in einer Datei zu platzieren, die nach dem Namen der ausführbaren Datei benannt ist (Hello) und mit a .c Verlängerung, dh Hello.c.

Dann ein einfaches

$ make Hello
cc     Hello.c   -o Hello

macht alles. Wenn Sie gcc anstelle von cc verwenden möchten, können Sie ausführen

$ rm Hello
$ make CC=gcc Hello
gcc     Hello.c   -o Hello

Wenn Sie Ihrem Ausbilder/Lehrer/Prof sagen, dass ein leeres Makefile alles ist, was Sie brauchen, da Sie wissen, dass die eingebauten Regeln das Richtige tun, erhalten Sie zusätzliche Anerkennung und vielleicht hat Ihr Ausbilder etwas Neues gelernt 🙂 Wenn Sie nach einer Referenz gefragt werden, könnten Sie die relevanten Teile des Herstellerhandbuchs zitieren oder, machen Sie es wie ein Profi, aus dem zitieren POSIX-Standard für das Dienstprogramm makeAbschnitt Standardregeln.

  • Vielen Dank. Nur um sicherzugehen, dass ich es richtig gemacht habe. Zuerst habe ich ein Hello.c mit nano und meinem Quellcode erstellt, dann habe ich es gespeichert und beendet und (make Hello) in der Terminalkonsole (von Linux/Unix) und ich habe (cc Hello.c -o Hello) unter meinem Befehl. Ich vermute also, dass cc (für das Kompilieren von c) und (-o etw ist, wenn durch das Verknüpfen eine ausführbare Ausgabe in die Dateiausgabe eingefügt wird, aber was bedeutet/bedeutet es tatsächlich in gewöhnlichen Worten (kompiliert Hello.c und gibt eine leere Ausgabe der Makefile-Anweisungen bu default?).Aber dann führe ich denselben Befehl aus (make Hello) und es gab (make: Hallo’ ist aktuell.`)

    – Schiwago

    4. Februar 2014 um 11:00 Uhr


  • make kompilieren Sie Ihre Hello.c Datei und erstellen Sie eine Binärdatei gemäß Ihrem Dateinamen. Wenn Sie erneut angeben make Befehl, dann wird es nach Änderungen in Ihrem suchen Hello.c Datei wenn nicht gefunden dann einfach ausgeben Hello is upto date

    – Jayesh Bhoi

    4. Februar 2014 um 11:22 Uhr


  • @Zhivago Wenn Sie make ein zweites Mal ausführen, wird überprüft, ob die Abhängigkeit jünger als das Ziel ist. Wenn ja, führt es die Befehle aus. Wenn nicht, gibt es nichts zu tun und zu sagen „Hallo ist aktuell“. Es ist intelligent genug zu wissen, dass es nicht nötig ist, Hello.c zu kompilieren, wenn es sich nicht geändert hat. Das ist der springende Punkt bei make: Führen Sie die minimale Arbeit aus, die zum Aktualisieren eines Ziels erforderlich ist. Wenn du touch Hello.c oder rm Hello es wird neu kompiliert.

    – Jens

    4. Februar 2014 um 11:59 Uhr


  • @ Schiwago Die -o file Option an den Compiler benennt die Ergebnisdatei (standardmäßig a.out. Ja, cc ist der traditionelle Name des Unix-C-Compilers, der unter Linux identisch ist mit gcc.

    – Jens

    4. Februar 2014 um 12:03 Uhr

  • @Jens Könntest du mir bitte sagen, was du getan hast, als du $ make CC=gcc geschrieben hast Hallo, hast du ein Argument oder eine Variable gesetzt

    – Schiwago

    19. September 2014 um 14:34 Uhr

Bevor Sie sich für Makefile entscheiden, müssen Sie wissen, was es ist und warum wir es brauchen

Was ist Makefile?

Makefile ist ein Skript, das in einer bestimmten vorgeschriebenen Syntax geschrieben ist und hilft, die Zielausgabe (normalerweise eine oder mehrere ausführbare Dateien) aus Quelldateien durch Kompilieren und Verknüpfen zu erstellen. Mit einfachen Worten, Makefile kompiliert Ihren Quellcode auf einfache und schnelle Weise. Warum brauchen wir Makefile?

=> Große Projekte können mehrere Quelldateien enthalten, die voneinander abhängig oder hierarchisch angeordnet sind. Um beispielsweise Datei A zu kompilieren, müssen Sie zuerst B kompilieren; Um B zu kompilieren, müssen Sie zuerst C kompilieren; usw.

=> Make ist eine Lösung für diese Probleme. Es kann verwendet werden, um das gesamte Projekt auf übersichtliche Weise zu kompilieren und Ihr Ziel gemäß Ihrer Make-Regel (die wir später besprechen werden) zu generieren, indem Sie einen einzigen Befehl namens make eingeben.

=> Ein wichtiges Merkmal ist, dass, wenn ein Projekt nach einigen Änderungen neu kompiliert wird, es nur die geänderten Dateien und alle anderen davon abhängigen Dateien neu kompiliert. Das spart viel Zeit.

=> Bei einem großen Projekt ist es bei wenigen Änderungen am Quellcode mühsam, fehleranfällig und zeitraubend, das gesamte Projekt jedes Mal manuell neu zu kompilieren.

Hier ist ein schöner Link dafür:So schreiben Sie das erste Makefile

Ein Makefile ist ein Rezept für Computer mit Anweisungen zur Ausführung bestimmter Aufgaben und mit Abhängigkeiten zwischen diesen Aufgaben.

In der einfachen Form sieht das so aus:

a.out: filename.c
        gcc filename.c

Lesen Sie: „Zum Bauen a.out aus filename.cführen Sie den Befehl aus gcc filename.c. Wenn a.out ist neuer als filename.cdann tu nichts”

Hinweis: Das erste Zeichen in der gcc Linie muss eine Registerkarte sein.

1444030cookie-checkWie man ein Makefile schreibt, um ein einfaches C-Programm zu kompilieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy