簡體   English   中英

Makefile-不是文件的最新規則

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM