複数のファイルをコンパイルするmakefileを作成しようとしています。あなたはおそらくメイクファイルから言うことができるようにC複数のファイルを含むMakefile
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
は、メインコードがmyprog.cであり、myprog.hとPROG-implementation.hが含まれています。ここに私の試みです。私はまた、私のコードのための4つのテストを持って、最後にメモリを確保するためのチェックを持っているすべての動的に割り当てられたメモリを解放します。テストはmain()メソッドが* .cファイルであるところです。
私はメイクファイルを使用しようとするたびに、それは私にエラー
make: Circular myprog.o <- myprog.o dependency dropped.
make: Nothing to be done for `all'.
を与える私のidentsのすべてが、タブではなくスペースであるので、それは問題ではありません。私はまた、私のコードに大きな問題がないことをかなり確信しているので、makefileは私の問題でなければなりません。どんな助けでも大歓迎です。
エラーを探してみましたか?私は[この投稿](https://stackoverflow.com/questions/21324697/makefile-circular-dependency-dropped)を見つけました。それは面白そう! –
'$(PROGS)'を 'myprog.o'に依存するように定義したようですが、' PROGS'もその依存関係を持っています。ちょうど推測。これは複雑なことです。 makeはすべてのオブジェクトファイルをワイルドカードを使ってすべてのCファイルに関して定義することができます。チュートリアルを探してみてください。 – jiveturkey
学習目的でない場合は、Makefileを手動で使用しないでください。 cmakeのような最新のツールを使用してください。 –