我正在尝试在添加新源(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,一切正常。
答案 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
。此错误表示尚未找到源文件。