Makefile:为什么我的目标没有执行命令?

Makefile:为什么我的目标没有执行命令?,makefile,Makefile,我正在努力提高我对如何运行命令的理解。 我已经编写了这个makefile: TARGET=fmake TARGET2=test_second fmake: $(TARGET2).c foo.c\ $(TARGET).c test.h $(CC) -o $(TARGET) $(TARGET).c foo.c $(CC) -o $(TARGET2) $(TARGET2).c foo.c: echo This is foo.c clean: rm -f fmak

我正在努力提高我对如何运行命令的理解。 我已经编写了这个makefile:

TARGET=fmake
TARGET2=test_second
fmake: $(TARGET2).c foo.c\
    $(TARGET).c test.h
    $(CC) -o $(TARGET) $(TARGET).c foo.c
    $(CC) -o $(TARGET2) $(TARGET2).c
foo.c:
    echo This is foo.c
clean:
    rm -f fmake test_second
CC=$(VAR2)
VAR2=gcc
运行make时,将显示以下shell命令:

gcc -o fmake fmake.c foo.c
gcc -o test_second test_second.c
但我希望在target foo.c中也会显示三个命令:

请解释原因。

在您的Makefile中,foo.c没有依赖项。只要该文件存在,相应的操作就不会运行

如果重新运行make,也会发生同样的情况。它将尝试构建的第一件事是fmake。但是,由于该目标的所有依赖项都已经存在,并且都比fmake文件旧,因此不会生成任何内容。对于foo.c也是一样,只是它没有依赖项,因此如果文件存在,它将永远不会运行操作。

在Makefile中,foo.c没有依赖项。只要该文件存在,相应的操作就不会运行


如果重新运行make,也会发生同样的情况。它将尝试构建的第一件事是fmake。但是,由于该目标的所有依赖项都已经存在,并且都比fmake文件旧,因此不会生成任何内容。foo.c的情况也一样,只是它没有依赖项,因此如果文件存在,它将永远不会运行操作。

从以a结尾的第一项开始。在这种情况下,它是伪造的。如果你把foo.c调高,那么它所做的只是回声,而不是别的。如果您想让它完成其余的工作,foo.c必须依赖于fmakemake,它从第一个项目开始,以一个结尾:。在这种情况下,它是伪造的。如果你把foo.c调高,那么它所做的只是回声,而不是别的。如果您想让它完成其余的工作,foo.c必须依赖于fmake
This is foo.c
gcc -o fmake fmake.c foo.c
gcc -o test_second test_second.c