2017-09-08 6 views
1

Ich habe versucht, eine richtige Makefile für eine Weile jetzt zu machen, aber ich bekomme immer den Fehler "make: *** Keine Regel, um Ziel` all 'zu machen. Stop. "makefile - make: *** Keine Regel, um das Ziel alle zu machen. Stop

i ein Hauptprogramm habe: mpasswdsort.c und die c-Datei weicht von mpasswdsort verwendet wird, kommt es mit einem Kopf auch: list.c und list.h

meine Make-Datei:

CC=gcc 
CFLAGS=-Wall -pedantic -ansi 
all: mpasswdsort 
server: mpasswdsort.o list.o 
    $(CC) mpasswdsort.o list.o -o mpasswdsort 
mpasswdsort.o: mpasswdsort.cpp 
    $(CC) $(CFLAGS) mpasswdsort.cpp 
list.o: list.cpp 
    $(CC) $(CFLAGS) list.cpp 
clean: 
    rm -f server client *.o core 

Ich bin nicht sicher, ob es in der Makefile falsch ist oder wenn die Makefil nicht eine TXT-Datei sein soll.

+0

Wie @JohnBollinger sagte - wie lautet der Name Ihres Makefile (und was sind die Berechtigungen)? – KevinDTimm

+1

Auch Ihr Makefile sagt 'all' umfasst' mpasswdsort', aber Sie haben keine Regel für 'mpasswdsort' – KevinDTimm

+0

Und das ist wahrscheinlich ein Fehler, @KevinDTimm, aber nicht * notwendigerweise * one. Wenn 'make' einen Weg finden kann,' mpasswdsort' über eine seiner eingebauten Regeln zu erstellen, ist es nicht notwendig, einen expliziten zu erstellen. In diesem Fall würde es versuchen, es aus 'mpasswdsort.o' zu bauen, wofür es eine explizite Regel zum Bauen gibt. Ich schätze, das würde wahrscheinlich nicht verlinken, aber die Diagnose würde sich sehr von den in der Frage dargestellten unterscheiden. –

Antwort

2

Die Fehlermeldung, die Sie anzeigen, zeigt an, dass make keine Regel zum Erstellen des Ziels "all" anzeigt. Es ist genau die gleiche Diagnose, die GNU make ausgibt, wenn es überhaupt kein Makefile gibt. Da der Makefile-Inhalt Do eine Regel für das Ziel "All" enthält, schließe ich, dass make sie nicht sieht.

das auch sein mag, weil die Make-Datei in einem anderen Verzeichnis ist, weil der Name von denen make versuchen standardmäßig unterschiedlich ist (Makefile oder makefile ist konventionell, GNU-Version von make prüft auch, ob GNUmakefile) oder weil ein Zugriffs- Kontrollproblem verhindert make das Lesen der Datei. Ich bin nicht sicher, ob sein falsch in der Make-Datei oder wenn der makefil ist nicht sein sollte eine .txt-Datei, da Sie

bemerken.

, die wahrscheinlichste Schlussfolgerung ist, dass (zumindest) der Dateiname falsch ist. Makefiles sind Textdateien, aber Textdateinamen enden nicht unbedingt mit ".txt". In der Tat, auf Linux und anderen Unixen, die meisten von ihnen nicht. Makefiles sollten nicht eine solche Erweiterung haben, obwohl Sie technisch die -f Option verwenden können, um make den Namen des zu verwendenden Makefile mitzuteilen.

+0

Alle Standardversionen von 'make' suchen sowohl nach' Makefile' als auch nach 'Makefile' (in dieser Reihenfolge) basierend auf dem Verhalten von das originale Unix 'make' Programm - siehe POSIX [' make'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html). Bei einem Dateisystem, bei dem die Groß- und Kleinschreibung nicht beachtet wird (Mac, Windows), gibt es natürlich keinen Unterschied. –

+0

Danke, @ JonathanLeffler, ich habe die Antwort im Lichte deines Kommentars aktualisiert. –

Verwandte Themen