makefile - Makefile 忽略现有目录
问题描述
我有Makefile:
MAKEFILE_DIR:=$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
DIR:=$(MAKEFILE_DIR)/some/where
.PHONY: load install
load: $(DIR)
some-actions...
$(DIR): install
another-actions...
当我跑步时,make load
我看到它$(DIR)
被视为缺失并且$(DIR)
目标被调用,因此install
也被调用another-actions
。每次都会发生这种情况。错误在哪里?如何修复它,$(DIR)
只有在它不存在时才会被调用?
PS。我知道$(DIR)
更改的时间,可能是每次“制作”运行后都会发生变化。我检查了它stat
,似乎它没有改变。
解决方案
每个.PHONY
目标都被视为不存在。因此,它总是被重建。每次重新构建任何先决条件时,目标(在本例中为 $(DIR))也是 REBUILT。
如何修复它
要么退出install
($(DIR)
实际上,我不明白为什么install
要在创建目录之前完成?),要么将其作为仅订单的先决条件(这意味着它永远不会触发重建其目标)。
我知道 $(DIR) 更改的 mtime 可能是在每次“make”运行后发生变化。我用stat检查了它,似乎它没有改变。
但它可以改变。因此,通常将目录设为仅订单的先决条件(尽管在这种特殊情况下似乎无关紧要)。
推荐阅读
- react-native - Picache gif 是静止图像(Expo + ReactNative)
- r - 如何让 submitButton 在初始加载 R Shiny App 之后才生效?
- php - 如何从浏览器在 s3 中创建新的“文件夹”
- c++ - 如何使用迭代器在向量中的不同位置插入多个元素?
- python - Pandas GroupBy.agg() 抛出 TypeError: aggregate() 缺少 1 个必需的位置参数:'arg'
- python - 带有身份验证的 API 请求:Python 的请求与 R 的 httr
- haskell - 使用 Stack 构建模块是否可以在全球范围内使用?
- javascript - 如何在表单中使用 getelementbyID 获取复选框的值
- javascript - 如何使此 google 脚本代码不那么重复?
- mysql - 如何创建一个存储函数,如果它不为空,则返回一个值?