3

我正在尝试在添加新源(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

这是生成文件

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;可能是什么问题?

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

4

3 回答 3

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 

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

myShell: main.o inputHandling.o processHandling.o syscallsWrapper.o
        $(CC) $(CFLAGS) -o $@ $^
于 2012-12-20T00:50:40.247 回答
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 
于 2012-12-20T00:52:24.780 回答
0

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

于 2012-12-20T00:50:50.660 回答