首页 文章

依赖于目录下所有文件的Makefile规则(包括在子目录中)

提问于
浏览
28

我的Makefile中的一条规则将整个目录( res/ )压缩为ZIP文件 . 显然,当 res/ 目录下的任何文件发生更改时,需要执行此规则 . 因此,我希望规则将该目录下的所有文件作为先决条件 . 我该如何实施这条规则?

在Bash with the globstar option enabled中,您可以使用通配符模式 res/**/* 获取该目录中所有文件的列表 . 但是,如果将其指定为Makefile中的先决条件,它似乎不起作用:

filename.jar: res/**/*

即使在 res/ 中输入文件后,仍然会生成报告

make: `filename.jar' is up to date.

很明显它没有认识到这种模式 .

如果我将目录本身声明为先决条件:

filename.jar: res

然后在修改文件时不会重新执行Make(我认为 make 只查看目录本身的修改日期,只有在添加,删除或重命名直接子项时才会更改) .

1 回答

  • 41

    这个:

    filename.jar: $(wildcard res/**/*)
    

    似乎工作,至少在某些平台上 .

    EDIT:

    或者更好,只是切结:

    filename.jar: $(shell find res -type f)
    

相关问题