[英]Makefile - up to date rule which is not a file
考慮到這個(非常)簡單的Makefile,
all: a b
@echo done
a:
touch $@
b:
touch $@
我沒有得到我預期的行為。
實際上,我希望僅在其中一項依賴關系不是最新時才執行我的規則“全部”。
但是在第一個$使我得到
touch a
touch b
done
還有其他
done
我無法理解,“最新”通常限定文件的資格,但是...如果所有依賴項都存在,則有什么辦法可以使規則“全部”保持最新?
非常感謝,
ps:我知道所有的技巧都可以,但那不是重點
否。如果目標不存在,那么make將始終運行該配方。
您的all
配方都可以通過多種方式檢查all
先決條件是否已建立,並且行為是否與此有所不同。 至少,如果您使用的是GNU make。
ETA:
一種方法是向每個目標添加$(eval BUILT = 1)
,然后在all
目標中查看是否設置了BUILT
。 這需要GNU make的最新版本:
BUILT =
all: a b
@[ -n '$(BUILT)' ] && echo done
a:
touch $@ $(eval BUILT = 1)
b:
touch $@ $(eval BUILT = 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.