makefile - 为什么这个 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
,就像第一个示例一样。
解决方案
很简单:因为blah.h
与../headers/blah.h
.
所以像这样的规则:
blah.h:
touch ../headers/blah.h
错误:目标告诉 make“这个配方将创建一个名为blah.h
”的文件,但配方实际上创建了一个名为../headers/blah.h
.
所以下一次 make 运行时,它会blah.h
再次查找:如果找到了,那么你会收到一条消息说事情是最新的。但是由于它没有找到,make 会尝试再次制作它,因为它显然不是最新的(因为它不存在)。
推荐阅读
- java - 如何仅将日期写入文本文件一次?
- flutter - 添加 Padding 小部件后出现 Flutter 异常
- rust - 理解 Rust 中的智能指针
- javascript - Angular 7 中辅助路由器的挑战
- android - 获取版本码时没有虚方法getLongVersionCode()J
- mysql - 选择不在选定字段中的字段 - MySQL
- apache - 如何计算资源大小以防止 golang http 服务器达到操作系统资源限制
- java - 如何在 ImageView 上设置随机颜色?
- java - 充满错误的全新 Eclipse 插件项目
- r - 如何在不使用 for 循环的情况下排除数据框的前两行并一次删除所有无数据列