Makefile 删除文件或添加旧文件时如何运行Make target?

Makefile 删除文件或添加旧文件时如何运行Make target?,makefile,gnu-make,Makefile,Gnu Make,我有一个make目标,如下所示: WXICONS_TIMESTAMP = assets/fonts/.timestamp # compile icons $(WXICONS_TIMESTAMP): scripts/svg2font.js artifacts/icons/*.svg $(NODE_BIN) $< touch $(WXICONS_TIMESTAMP) WXICONS\u TIMESTAMP=assets/font/.TIMESTAMP #编译图标 $(WX

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

WXICONS_TIMESTAMP = assets/fonts/.timestamp

# compile icons
$(WXICONS_TIMESTAMP): scripts/svg2font.js artifacts/icons/*.svg
    $(NODE_BIN) $< 
    touch $(WXICONS_TIMESTAMP)
WXICONS\u TIMESTAMP=assets/font/.TIMESTAMP
#编译图标
$(WXICONS_TIMESTAMP):scripts/svg2font.js artifacts/icons/*.svg
$(NODE_BIN)$<
触摸$(WXICONS\u时间戳)
i、 例如,它运行一个脚本,将目录中的一组
.svg
文件编译成两个字体文件

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


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

这是唯一一个让目标依赖于目录而不是文件的情况。创建新文件、删除现有文件或重命名该目录中的文件时,目录的修改时间将更新

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

$(WXICONS_TIMESTAMP): scripts/svg2font.js artifacts/icons/. artifacts/icons/*.svg
    $(NODE_BIN) $< 
    touch $(WXICONS_TIMESTAMP)
$(WXICONS\u时间戳):scripts/svg2font.js artifacts/icons/。工件/图标/*.svg
$(NODE_BIN)$<
触摸$(WXICONS\u时间戳)

完美!我不知道你能做到。