次のようなオブジェクトファイルがあります。
task1.o task2.o task3.o task4.o tasks.o comm.o
すべての task*.o を 2 つの tasks.o comm.o にリンクする必要があります。手動では次のようになります。
gcc -Wall -o task1 task1.o tasks.o comm.o
gcc -Wall -o task2 task2.o tasks.o comm.o
その結果、4つの実行可能ファイル、task1.exeなどがありますが、次のようなmakefileでこれを実行しようとすると:
TASKS= task1 task2 task3 task4
TASK_OBJECTS= task1.o task2.o task3.o task4.o
OBJS_SOURCES= tasks.c comm.c
OBJS= tasks.o comm.o
CC=gcc
CFLAGS= -Wall -c -o
all: $(TASKS)
$(TASKS): $(TASK_OBJECTS) $(OBJS)
$(CC) -o $@ $(TASK_OBJECTS) $(OBJS)
$(TASK_OBJECTS): %.o: %.c
$(CC) $(CFLAGS) $@ $<
$(OBJS): %.o: %.c
$(CC) $(CFLAGS) $@ $<
clean:
rm -rf *.o task1 task2 task3 task4
私は得る:
gcc -Wall -c -o task1.o task1.c
gcc -Wall -c -o task2.o task2.c
gcc -Wall -c -o task3.o task3.c
gcc -Wall -c -o task4.o task4.c
gcc -Wall -c -o tasks.o tasks.c
gcc -Wall -c -o comm.o comm.c
gcc -o task1 task1.o task2.o task3.o task4.o tasks.o comm.o
それ以外の
gcc -Wall -c -o task1.o task1.c
gcc -Wall -c -o task2.o task2.c
gcc -Wall -c -o task3.o task3.c
gcc -Wall -c -o task4.o task4.c
gcc -Wall -c -o tasks.o tasks.c
gcc -Wall -c -o comm.o comm.c
gcc -o task1 task1.o tasks.o comm.o
gcc -o task2 task2.o tasks.o comm.o
gcc -o task3 task3.o tasks.o comm.o
gcc -o task4 task4.o tasks.o comm.o
私は何を間違っていますか?