c makefile - 没有输入文件

c makefile - no input file

这里是我的 makefile 代码:

    CC=gcc 
    CFLAGS= -g -W -Wall -o
    EXEC=program
    all :   $(EXEC)
    program:    apple.o cream.o cake.o  program.o
                $(CC)   $(CFLAGS)   program apple.o cream.o cake.o  program.0

    program.o:  program.c   apple.o cream.o cake.o
                $(CC)   $(CFLAGS)   program.c

    apple.o:    apple.c apple.h
                $(CC)   $(CFLAGS)   apple.c apple.h

    cream.o:    apple.o cream.c cream.h
                $(CC)   $(CFLAGS)   cream.c cream.h

    cake.o:     cake.c  cake.h  cream.o apple.o
                $(CC)   $(CFLAGS)   cake.c  cake.h
clean:
    -rm -rf *.o $(EXEC)

我遇到了一个错误: *gcc: 没有输入文件 make: *[program.o] 错误 1***

只是想让你知道。

我希望能够创建一个生成我的 exec 的 makefile 'program'。而且我已经读到我可以使用 de -I 标志,它会查看包含 header 的目录。但是当我在我的 CFLAGS 中添加 -I 时,它变得更糟

非常感谢。

CFLAGS= -g -W -Wall -o
:
program.o:  program.c   apple.o cream.o cake.o
    $(CC)   $(CFLAGS)   program.c

问题(其中之一)就在那里。

由于 CFLAGS-o 结尾,输出文件的规范,命令最终为:

gcc -g -W -Wall -o program.c

换句话说,您将 program.c 指定为 output 文件并且不提供 input 文件。

您需要使用以下内容指定输出文件:

program: program.c apple.o cream.o cake.o
    $(CC) $(CFLAGS) program program.c apple.o cream.o cake.o

(尽管使用 make 提供的元变量可能有更好的方法来做到这一点)。

您似乎也对编译过程有些困惑。尽管您的 规则 用于构建目标文件 program.o,但您拥有的编译器选项将尝试生成最终的可执行文件(因为它们没有 -c ).