Ich habe diese Dateien main.c
, fun.c
und fun.h
. Ich möchte makefile
Skript anstelle von herkömmlichen kompilierenden Ansatz ausführen. Derjenige, der das folgende Makefile-Skript gepostet hat, sagte, dass dieses Skript automatisch die Dateinamen im selben Verzeichnis erfassen würde, also brauche ich nur zum Projektverzeichnis zu gehen und in das Terminal $ make
zu schreiben. Ich habe eine Datei makefile
und setzen Sie das folgende Skript:Makefile Skript läuft nicht richtig
TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall
.PHONY: default all clean
default: $(TARGET)
all: default
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c $< -o [email protected]
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected]
clean:
-rm -f *.o
-rm -f $(TARGET)
Allerdings bekomme ich diesen Fehler: make: *** No rule to make target
default‘.
Ich versuchte $make -v
und bekam:
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
Ich glaube, ich ihn falsch verstanden! Bitte, was fehlt hier? Vielen Dank
Makefiles sind ** nicht ** Skripte ... und ich würde sie sehr ** traditionell verwenden (aber Ihr Ansatz, nur etwas zu kompilieren mit dem Namen '* .c' ist definitiv nicht sehr traditionell ...) –
Ihr 'Default'-Ziel, das in diesem Makefile überhaupt keinen Zweck erfüllt, hat keinen Zweck. Warum schreibst du nicht einfach "all: $ (TARGET)" als erste Regel? –
Es scheint mir korrekt zu sein, denken Sie daran, dass in Makefile diese Leerzeichen (4 Leerzeichen in der Sequenz) müssen Tabs ('\ t') sein. – Amadeus