Mein Ordner eg_make_creation enthält die folgenden Dateien,
desktop:~/eg_make_creation$ ls
factorial.c functions.h hello hello.c main.c Makefile
Makefile
# I am a comment, and I want to say that the variable CC will be
# the compiler to use.
CC=gcc
# Hwy!, I am comment no.2. I want to say that CFLAGS will be the
#options I'll pass to the compiler
CFLAGS=-c -Wall
all:hello
hello:main.o factorial.o hello.o
$(CC) main.o factorial.o hello.o -o hello
main.o:main.c
$(CC) $(CFLAGS) main.c
factorial.o:factorial.c
$(CC) $(CFLAGS) factorial.c
hello.o:hello.c
$(CC) $(CFLAGS) hello.c
clean:
rm -rf *o hello
Error:
desktop:~/eg_make_creation$ make all
make: Nothing to be done for `all'.
Bitte helfen Sie mir, dieses Programm zu kompilieren.
Versuchen Sie, ein „Make Clean“ gefolgt von einem „Make All“ durchzuführen.
– PaulR
19. Dezember 2011 um 12:56 Uhr
Das ist kein Fehler, es bedeutet nur hello ist aktuell. Veränderung clean zu rm -f *.o hello bevor es etwas Unerwartetes tut, dann laufen make clean all und schau ob das geht.
– Matte
19. Dezember 2011 um 12:57 Uhr
Sie sollten auch hinzufügen .phony: all cleanseit all und clean sind keine Dateinamen.
– Kerrek SB
19. Dezember 2011 um 12:58 Uhr
Fügen Sie das -c nicht in Ihre CFLAGS ein.
– Wildpässer
19. Dezember 2011 um 12:59 Uhr
VirtualVDX
Manchmal kann der Fehler „Für alle nichts zu tun“ durch Leerzeichen vor dem Befehl in der Makefile-Regel anstelle von Tabulatoren verursacht werden. Bitte stellen Sie sicher, dass Sie innerhalb Ihrer Regeln Tabulatoren anstelle von Leerzeichen verwenden.
obj-m += hello.o alle: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) Module bereinigen: make -C /lib/modules/$( Shell uname -r)/build M=$(PWD) clean
– Narendra Jaggi
21. Juni 2015 um 8:14 Uhr
ist die obige Datei eine gültige Datei??
– Narendra Jaggi
21. Juni 2015 um 8:15 Uhr
Im Kontext von Eltern-Kind-Makefiles kann manchmal der Fehler „Für alle ist nichts zu tun“ dadurch verursacht werden, dass untergeordnete Ziele im Eltern-Makefile fälschlicherweise als .PHONY gekennzeichnet sind.
– Donhektor
27. April 2018 um 23:57 Uhr
ich hatte all : src/server/mod_wsgi.lazu dem ich gewechselt habe all : </t> src/server/mod_wsgi.la. Ich bekomme jetzt den Fehler: make: execvp: src/server/mod_wsgi.la: Permission denied Makefile:29: recipe for target 'all' failed make: *** [all] Error 127 nach sudo make. Irgendeine Hilfe?
Entferne das hello Datei aus Ihrem Ordner und versuchen Sie es erneut.
Das all Ziel hängt von der ab hello Ziel. Das hello target versucht zunächst, die entsprechende Datei im Dateisystem zu finden. Wenn es es findet und mit den abhängigen Dateien auf dem neuesten Stand ist, gibt es nichts zu tun.
obj-m += hello.o alle: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) Module bereinigen: make -C /lib/modules/$( Shell uname -r)/build M=$(PWD) clean
– Narendra Jaggi
21. Juni 2015 um 8:15 Uhr
Ist das obige eine gültige Make-Datei?
– Narendra Jaggi
21. Juni 2015 um 8:16 Uhr
Wenn Sie einfach make angeben, wird die erste Regel in Ihrem Makefile erstellt, dh “all”. Sie haben angegeben, dass “all” von “hello” abhängt, das wiederum von main.o, factorial.o und hello.o abhängt. Also versucht ‘make’ zu sehen, ob diese Dateien vorhanden sind.
Wenn sie vorhanden sind, sieht ‘make’ nach, ob sich ihre Abhängigkeiten, zB main.o hat eine Abhängigkeit main.c, geändert haben. Wenn sie sich geändert haben, erstellt make sie neu, andernfalls überspringt sie die Regel. In ähnlicher Weise fährt es rekursiv mit dem Erstellen der geänderten Dateien fort und führt schließlich den obersten Befehl aus, in Ihrem Fall “all”, um Ihnen eine ausführbare Datei zu geben, in Ihrem Fall “hello”.
Wenn sie nicht vorhanden sind, baut make blind alles unter der Regel.
Um zu Ihrem Problem zu kommen, es ist kein Fehler, aber ‘make’ sagt, dass jede Abhängigkeit in Ihrem Makefile auf dem neuesten Stand ist und nichts gemacht werden muss!
Make verhält sich korrekt. hello existiert bereits und ist nicht älter als die .c Dateien, und daher ist keine Arbeit mehr zu erledigen. Es gibt vier Szenarien, in denen make (neu) bauen muss:
Wenn Sie eine Ihrer ändern .c Dateien, dann wird es neuer sein als hellound dann muss es neu erstellt werden, wenn Sie make ausführen.
Wenn Sie löschen hellodann muss es natürlich wieder aufgebaut werden
Sie können make dazu zwingen, alles mit dem neu zu erstellen -B Möglichkeit. make -B all
make clean all wird löschen hello und einen Umbau erfordern. (Ich schlage vor, Sie sehen sich den Kommentar von @Mat an rm -f *.o hello
Ich glaube, Sie haben in der 9. Zeile einen Tabulator übersehen. Die folgende Zeile alle: hallo muss eine leere Registerkarte sein. Stellen Sie sicher, dass in der 9. Zeile ein leerer Tabulator vorhanden ist. Dadurch versteht der Interpreter, dass Sie das Standardrezept für das Makefile verwenden möchten.
dreifach
Das ist kein Fehler; Der make-Befehl in Unix funktioniert basierend auf den Zeitstempeln. Dh sagen wir, wenn Sie bestimmte Änderungen an vorgenommen haben factorial.cpp und kompilieren mit make dann make zeigt die Information, dass nur die cc -o factorial.cpp Befehl ausgeführt wird. Wenn Sie das nächste Mal denselben Befehl ausführen, dh make ohne Änderungen an einer Datei mit vorzunehmen .cpp Erweiterung sagt der Compiler, dass die Ausgabedatei aktuell ist. Der Compiler gibt diese Informationen aus, bis wir bestimmte Änderungen daran vornehmen file.cpp.
Der Vorteil der makefile besteht darin, dass es die Neukompilierungszeit reduziert, indem nur die Dateien kompiliert werden, die geändert wurden, und indem das Objekt (.o) Dateien der unveränderten Dateien direkt.
Snympi
Mit dem Kommentar von Paul R habe ich das gefunden
make clean
gefolgt von
make
oder
make all
mein Problem behoben.
14235800cookie-checkmake: Nichts zu tun für `alle’yes
Versuchen Sie, ein „Make Clean“ gefolgt von einem „Make All“ durchzuführen.
– PaulR
19. Dezember 2011 um 12:56 Uhr
Das ist kein Fehler, es bedeutet nur
hello
ist aktuell. Veränderungclean
zurm -f *.o hello
bevor es etwas Unerwartetes tut, dann laufenmake clean all
und schau ob das geht.– Matte
19. Dezember 2011 um 12:57 Uhr
Sie sollten auch hinzufügen
.phony: all clean
seitall
undclean
sind keine Dateinamen.– Kerrek SB
19. Dezember 2011 um 12:58 Uhr
Fügen Sie das -c nicht in Ihre CFLAGS ein.
– Wildpässer
19. Dezember 2011 um 12:59 Uhr