Ich habe einen C-Code für eine Zuweisung kompiliert und ich habe "make codeFile" ausgeführt, wobei "codeFile" der Name meines C-Programms war, und obwohl ich kein Makefile hatte, wurde eine ausführbare Datei erstellt lief und arbeitete richtig.
Weiß jemand, warum das funktioniert hat? Warum kompilieren Sie etwas, auch wenn ich kein Makefile habe? Die einzige Referenz, die ich finden konnte, war diese: Ссылка
Make verfügt über eine interne Datenbank mit impliziten Regeln. Sie können make -p
verwenden, um sie aufzulisten. Auch make -d
wird Ihnen sagen, welche Regeln angewendet werden, damit Sie herausfinden können, welche impliziten Regeln in diesem Fall verwendet werden.
Make hat mehrere vordefinierte implizite Regeln . In Ihrem Fall verwendet es zwei Regeln, um zu bestimmen, was für das Ziel codeFile
zu tun ist:
Verwenden Sie den make-Befehl ohne Makefiles?
make
hat implizite Regeln, die als Standardwerte funktionieren, sofern Sie sie nicht überschreiben.
Laut make man-Seite :
%Vor%listet alle impliziten Regeln (und relevante Umgebungsvariablen) auf, ohne zu versuchen, Dateien neu zu erstellen.
Um die Verwendung zu demonstrieren, habe ich in Cygwin make
ausgeführt, was mir eine Datei exe
beschert hat. Beachten Sie, dass .c
für den übergebenen Namen nicht gilt:
Ich habe das auch in Ubuntu Linux ausgeführt, und mein Ergebnis war fast das gleiche wie oben, aber die .exe
Erweiterung war nicht da, stattdessen hatte ich die einfache hello
ausführbar:
Schrittweise Ableitung
Ich glaube, dass die relevanten Teile der impliziten make-Regeln wie folgt sind:
%Vor% cc
wird mit CC
Ein LINK
-Format wird erstellt, in dem die Flags leer sind und die Variable TARGET_ARCH
ebenfalls leer ist ( damit Benutzer Werte für verschiedene Zielarchitekturen festlegen können .) Dann haben wir:
Die ^
Variable ist die Voraussetzung, hello.c
. Die anderen Variablen sind leer. Darauf folgen das Flag -o
und der Zielname. Die leeren Variablen erklären die zusätzlichen Leerzeichen im Befehl make ran:
Und das %: %.c
stimmt mit dem Ziel überein, das mit dem Dateinamen des gleichen Zielnamens gemacht wurde, der in .c
endet, wodurch das Rezept ausgeführt wurde.
Tags und Links c compiler-construction makefile