Makefile规则取决于目录内容的更改

Hal*_*far 6 directory dependencies makefile

使用Make是一种很好的依赖目录内容的方法.

基本上我有一些应用程序代码依赖的生成代码.如果目录的内容发生变化,则生成的代码只需要更改,不一定是在内部文件更改其内容时.因此,如果删除或添加或重命名文件,我需要运行规则.

我的第一个想法是生成一个文本文件列表的目录和差异与最后一个列表.更改意味着重新运行构建.我想我必须将generate和diff部分传递给bash脚本.

我希望以某种方式在他们的无限智慧中可能有一个更容易的解决方案.

Hal*_*far 11

感谢让我走上正轨的gjulianm.他的解决方案非常适合单个目录.

为了让它以递归方式工作,我做了以下工作.

ASSET_DIRS = $(shell find ../../assets/ -type d)
ASSET_FILES = $(shell find ../../assets/ -type f -name '*')

codegen: ../../assets/ $(ASSET_DIRS) $(ASSET_FILES)
     generate-my-code
Run Code Online (Sandbox Code Playgroud)

现在看来,对目录或文件的任何更改(添加,删除,重命名,修改)都将导致此规则运行.文件名可能存在一些问题(空格可能会导致问题).


gju*_*anm 5

假设您的目录名为dir,那么此makefile将执行您想要的操作:

FILES = $(wildcard dir/*)

codegen: dir # Add $(FILES) here if you want the rule to run on file changes too.
    generate-my-code
Run Code Online (Sandbox Code Playgroud)

如注释中所述,FILES如果您也希望代码也依赖于文件内容,则也可以添加变量。