Ich versuche, ein Makefile zu schreiben, das mehrere Dateien kompiliert. Hier ist mein Versuch:C Makefile mit mehreren Dateien
CC = gcc
CFLAGS = -ansi -Wall -g -O0 -Wwrite-strings -Wshadow \
-pedantic-errors -fstack-protector-all
PROGS = myprog.o test1 test2 test3 test4 \
all: $(PROGS)
clean:
rm -f *.o $(PROGS) *.tmp
$(PROGS): myprog.o
myprog.o: prog-implementation.h myprog.c myprog.h
gcc $(CFLAGS) -c myprog.c
memory_checker: memory_checker.o
gcc -o memory_checker memory_checker.o
memory_checker.o: memory_checker.c memory_checker.h
gcc $(CFLAGS) -c memory_checker.c
test1: test1.o
gcc -o test1 test1.o myprog.o
test1.o: test1.c myprog.h myprog.c
gcc $(CFLAGS) -c test1.c myprog.c
test2: test2.o
gcc -o test2 test2.o myprog.o
test2.o: test2.c myprog.h
gcc $(CFLAGS) -c test2.c
test3: test3.o
gcc -o test3 test3.o myprog.o
test3.o: test3.c myprog.h
gcc $(CFLAGS) -c test3.c
test4: test4.o
gcc -o test4 test4.o myprog.o memory_checker.c
test4.o: test4.c myprog.h memory_checker.h
gcc $(CFLAGS) -c test4.c
Wie Sie wahrscheinlich von der Make-Datei kann sagen, der Hauptcode ist in myprog.c, die myprog.h und Prog-implementation.h enthält. Ich habe auch 4 Tests für meinen Code, von denen der letzte einen memory_checker hat, um sicherzustellen, dass ich den gesamten dynamisch zugewiesenen Speicher freigegeben habe. Bei den Tests handelt es sich um die main() -Methoden, die * .c-Dateien sind und sind.
Jedes Mal, wenn ich versuchen, die Make-Datei zu verwenden, ist es mir den Fehler
make: Circular myprog.o <- myprog.o dependency dropped.
make: Nothing to be done for `all'.
Alle meine Idents sind mit Tabs und keine Leerzeichen gibt, so dass nicht das Problem ist. Ich bin auch ziemlich sicher, dass es keine größeren Probleme mit meinem Code gibt, also muss das Makefile mein Problem sein. Jede Hilfe würde sehr geschätzt werden.
Haben Sie versucht, nach dem Fehler zu suchen? Ich habe [diesen Beitrag] gefunden (https://stackoverflow.com/questions/21324697/makefile-circular-dependency-droped). Das klingt interessant! –
Es sieht so aus, als ob Sie '$ (PROGS)' definiert haben, um von 'myprog.o' abhängig zu sein, aber' PROGS' hat auch diese Abhängigkeit. Einfach raten. Das ist viel zu komplex. make kann mit Hilfe von Platzhaltern alle Objektdateien für alle C-Dateien definieren. Suchen Sie einfach nach einem Tutorial. – jiveturkey
Wenn nicht zu Lernzwecken, verwenden Sie Makefiles nicht manuell. Verwenden Sie ein modernes Werkzeug wie CMake. –