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

时间:2014-01-05 08:21:18

标签: makefile

我正在努力提高我对make运行命令的理解。 我写了这个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

但我希望显示三个命令(也是目标foo.c):

This is foo.c
gcc -o fmake fmake.c foo.c
gcc -o test_second test_second.c

请解释为何如此。

1 个答案:

答案 0 :(得分:4)

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

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