依赖于子目录中的所有文件(git submodule)

时间:2018-04-30 19:53:01

标签: makefile gnu-make

我想写一个(GNU)make规则,它依赖于子目录中某个文件(任意文件)的存在。在我的特定情况下,该子目录是一个git子模块。

这就是我所拥有的:

DEP = submod/.git

$(DEP):
        git submodule update --init $(@D)

submod/%: | $(DEP)
        @ # why do I need this?

install: submod/junk.c
        echo installing

如果我然后键入make install,则运行git命令(将其更改为mkdir -p $(@D); touch $@以进行非git特定的测试),make不会抱怨。

我有两个问题。主要是submod/%我应该关注的虚拟配方有任何副作用吗?其次,更有趣的是,为什么我需要这个食谱呢?如果我将其删除,请输出错误:

make: *** No rule to make target 'submod/junk.c', needed by 'install'.  Stop.

我唯一的假设是make正在根据启动时存在的文件进行一些优化,并且使用无配方版本,它认为它可以只是期望文件在需要时存在,但是有任何配方那里,它无法进行优化,并在需要时重新评估。如果这是真的,它是一个错误,还是应该改变的东西?

0 个答案:

没有答案