我正在努力提高我对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
请解释为何如此。
答案 0 :(得分:4)
在Makefile中,foo.c
没有依赖关系。只要该文件存在,就不会运行相应的操作。
如果你重新运行make
,就会发生同样的事情。它将尝试构建的第一件事是fmake
。但由于所有目标的依赖项已经存在,并且比fmake
文件旧,所以不会构建任何内容。 foo.c
的情况相同,但它没有依赖关系(因此如果文件存在,它将永远不会运行操作)。