blah: blah.o
cc blah.o -o blah # Runs third
blah.o: blah.c
cc -c blah.c -o blah.o # Runs second
blah.c:
echo "int main() { return 0; }" > blah.c # Runs first
当我运行make
命令时,它给出了预期的输出。现在,如果我运行touch
blah.c 文件,输出为cc -c blah.c -o blah.o cc blah.o -o blah
,但是当我运行delete
blah.c 文件时,它继续创建它并且输出为echo "int main() {return 0; }" > blah.c cc -c blah.c -o blah.o cc blah.o -o blah
。
现在我无法理解的是,“blah”如何知道 blah.c 不可用。它只是检查了 blah.o,其时间戳没有改变。是不是 blah.o 自己在被“blah”检查时检查了 blah.c 是否有任何更新。无论如何,为什么两个输出不同。是不是touch
ing 文件 blah.c 并没有删除它,而 blah.o 知道这一点,所以它只是更新了它的时间戳。到底发生了什么?