【问题标题】:Make: Totally ignoring a ruleMake:完全无视规则
【发布时间】:2012-12-20 00:47:48
【问题描述】:

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

【问题讨论】:

    标签: c linux gcc makefile


    【解决方案1】:

    将 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 $@ $^
    

    【讨论】:

    • 顺便说一句:您可以通过使用列表来避免很多此类错误:OBJS=main.o inputHandling.o processHandling.o syscallsWrapper.o,然后在需要它们的两行中引用 $OBJS。
    【解决方案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 
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-28
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 2017-09-26
        相关资源
        最近更新 更多