如何检查子邮件是否是最新的

时间:2014-11-07 16:28:44

标签: makefile

让我们考虑一下这个文件结构:

/project
+ Makefile
+ projectA
| + Makefile
| + foo.c
| + bar.c
| + ...
|
+ projectB
  + Makefile
  + oak.c
  + ...

如何快速检查子邮件是否是最新的?

在我的主要作品中我有:

all: 
   make -C projectA      

在submakefile中

all: a.txt b.txt

%.txt:%.xtx
   cp $< $@

这个解决方案的问题在于我总是会调用submake,无论它无关。我想避免它。

我发现的丑陋的解决方案是在我的submakefile中创建一个make规则来回显所有依赖于主目标的文件。然后我可以使用shell命令调用submake:

 listfiles=$(shell make -C projectA listfiles)
 all: $(listfiles)
    make -C projectA

修改

更好的方法是在每个子项目中都有一个shell脚本,它返回所有项目依赖项的列表。例如:

项目C / listdep.sh:

 #!/usr/bin/bash
 find . -iname *.[ch]

然后我可以在父make:

中使用这个脚本
 projectc/a.out: $(shell projectc/listdep.sh)
    make -C $(dir $@)

通过这种方式,如果projectc/a.out存在,并且更新近它的依赖关系,父母就不会调用该方法。

1 个答案:

答案 0 :(得分:1)

我希望您的projectAprojectB是“自足的”。这意味着,他们的构建不会从该项目外部读取任何源或构建中间文件。他们可能会使用gcc之类的工具,或者像上面示例cp中那样使用工具,但不能使用其目录之外的源,而不能使用其他人构建的任何文件。换句话说,如果您删除了树的其余部分,并且只使用projectA自己构建projectBMakefile,那么它们就会很好地构建。

在这种情况下,可以使用递归Make。

如果你使用递归Make,你必须做你正在做的事情,

make -C projectA

没有更好的方法。这是“快速检查”“submake”是否是最新的最佳方式。