制造:完全无视规则

时间:2012-12-20 00:47:48

标签: c linux gcc makefile

我正在尝试在添加新源(processHandling.c)之后编译我的项目,并且当我'make'时我得到了这个结果

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,似乎因为某些原因而完全忽略了编译processHandling.o的规则;问题是什么?

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

3 个答案:

答案 0 :(得分:3)

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

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

顺便说一下,使用automatic variables可以帮助减少重复的文件名。例如:

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

答案 1 :(得分:2)

您需要添加“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 

答案 2 :(得分:0)

检查您是否确实拥有文件processHandling.c。此错误表示尚未找到源文件。