如何在删除文件或添加旧文件时运行Make目标?

时间:2017-04-13 19:04:29

标签: makefile gnu-make

我有一个make目标,如下所示:

WXICONS_TIMESTAMP = assets/fonts/.timestamp

# compile icons
$(WXICONS_TIMESTAMP): scripts/svg2font.js artifacts/icons/*.svg
    $(NODE_BIN) $< 
    touch $(WXICONS_TIMESTAMP)

即,它运行一个脚本,将目录中的一堆.svg个文件编译成几个字体文件。

如果您修改此目录中的任何文件,则会触发make目标,因为.svg文件将比我的dumby .timestamp文件更新。但是,如果您删除 .svg文件没有任何反应,或者如果您将.svg文件添加到mtime早于.timestamp文件的目录中,则没有任何反应。

那么在添加,删除或修改文件时如何触发目标?

1 个答案:

答案 0 :(得分:1)

这是目标依赖于目录而不是文件的唯一合理时间之一。当创建新文件,删除现有文件或在该目录中重命名文件时,将更新目录的修改时间。

因此,如果列出包含.svg文件的目录作为时间戳目标的先决条件,则无论何时添加,删除或更新该文件,该规则都将再次运行。

$(WXICONS_TIMESTAMP): scripts/svg2font.js artifacts/icons/. artifacts/icons/*.svg
    $(NODE_BIN) $< 
    touch $(WXICONS_TIMESTAMP)