使:完全无视规则

我试图编译我的项目后添加一个新的源(processHandling.c),我得到这个结果,当我'

gcc -gstabs -W -Wall -std=gnu99 -c main.c gcc -gstabs -W -Wall -std=gnu99 -c inputHandling.c gcc -gstabs -W -Wall -std=gnu99 -c syscallsWrapper.c gcc -gstabs -W -Wall -std=gnu99 -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o gcc: error: processHandling.o: No such file or directory make: *** [myShell] Error 1 

这是makefile

 CC = gcc CFLAGS = -gstabs -W -Wall -std=gnu99 myShell: main.o inputHandling.o syscallsWrapper.o $(CC) $(CFLAGS) -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o main.o: main.c $(CC) $(CFLAGS) -c main.c inputHandling.o: inputHandling.c $(CC) $(CFLAGS) -c inputHandling.c processHandling.o: processHandling.c $(CC) $(CFLAGS) -c processHandling.c syscallsWrapper.o: syscallsWrapper.c $(CC) $(CFLAGS) -c syscallsWrapper.c clean: -rm myShell *.o 

我试着用-d标志运行make,看来由于某种原因make完全忽略了编译processHandling.o的规则; 问题是什么?

另外请注意,如果我使用gcc -c手动编译processHandling,一切正常。

将processHandling.o添加到myShell目标的依赖项列表中:

 myShell: main.o inputHandling.o processHandling.o syscallsWrapper.o $(CC) $(CFLAGS) -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o 

顺便说一句,使用自动变量可以帮助减少重复的文件名称。 例如:

 myShell: main.o inputHandling.o processHandling.o syscallsWrapper.o $(CC) $(CFLAGS) -o $@ $^ 

您需要添加“processHandling.o”作为myShell的先决条件。 否则,在创建myShell时,processHandling.o的规则将不会被应用,因为makefile认为myShell不需要processHandling.o。 你可以简单地像这样添加它

 myShell: main.o inputHandling.o syscallsWrapper.o processHandling.o $(CC) $(CFLAGS) -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o 

检查你是否真的有文件processHandling.c 。 此错误意味着源文件尚未找到。