c - 制作 : Totally ignoring a rule

标签 c linux gcc makefile

我正在尝试在添加新源 (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 的规则;可能是什么问题?

另请注意,如果我使用 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 

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

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

关于c - 制作 : Totally ignoring a rule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963654/

相关文章:

linux - Linux下两个文件的差异

linux - OpenCv 人脸检测示例卡住,没有任何错误或日志

c - 如何在 C 中以特定速率运行循环(在仿真中)

c - 在 For 循环中使用增量

c++ - 检查内存是否归零的最快方法

c - 在 gcc 编译器中链接自定义 header

c++ - 当 `delete` 使用非虚析构函数处理基类时,Clang 和 GCC 会做什么?

gcc - gcc 链接时可以使用多核吗?

c - for循环问题

c - 使用 taglib 库函数中的 C 语言的音频文件的属性