Verwenden Sie den make-Befehl ohne Makefiles?

8

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: Ссылка

    
lu6cifer 01.04.2013, 14:24
quelle

3 Antworten

9

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.

    
Jorge Núñez 01.04.2013 14:27
quelle
8

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:

%Vor%     
Oliver Charlesworth 01.04.2013 14:26
quelle
4
  

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:

%Vor%

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:

%Vor%

Schrittweise Ableitung

Ich glaube, dass die relevanten Teile der impliziten make-Regeln wie folgt sind:

%Vor%

cc wird mit CC

verknüpft %Vor%

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:

%Vor%

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:

%Vor%

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.

    
Aaron Hall 01.06.2015 19:23
quelle