首页 > 解决方案 > 为什么这个 makefile 示例不显示 make: 'xxxx' 是最新的。?

问题描述

我正在阅读此https://makefiletutorial.com/makefile教程。

用这个例子:

some_file:
    echo "This line will only print once"
    touch some_file

该文件将第一次制作 some_file,第二次通知它已经制作,导致make: 'some_file' is up to date.


在这个例子中:

some_binary: ../headers blah.h
    touch some_binary

../headers:
    mkdir ../headers

blah.h:
    touch ../headers/blah.h

clean:
    rm -rf ../headers
    rm -f some_binary

为什么我没有收到'xxxx' is up to date通知?我的输出是:

tianhe@tianhe-windy:~/Desktop/learnMake/lala$ make 
mkdir ../headers
touch ../headers/blah.h
touch some_binary
tianhe@tianhe-windy:~/Desktop/learnMake/lala$ make 
touch ../headers/blah.h  
touch some_binary
tianhe@tianhe-windy:~/Desktop/learnMake/lala$ 

我希望xxx is up to date在第二次运行时得到通知make,就像第一个示例一样。

标签: makefile

解决方案


很简单:因为blah.h../headers/blah.h.

所以像这样的规则:

blah.h:
        touch ../headers/blah.h

错误:目标告诉 make“这个配方将创建一个名为blah.h”的文件,但配方实际上创建了一个名为../headers/blah.h.

所以下一次 make 运行时,它会blah.h再次查找:如果找到了,那么你会收到一条消息说事情是最新的。但是由于它没有找到,make 会尝试再次制作它,因为它显然不是最新的(因为它不存在)。


推荐阅读