当有变化时,如何在调用子构建时检查依赖项?

时间:2009-02-17 13:51:38

标签: makefile multiple-makefiles

如果我有一个调用另一个makefile的makefile,如何让master makefile正确检查下级makefile的依赖项是否已更改?

例如,如果我有规则

server:
     @cd $(SERVERDIR) && $(MAKE)

在我构建可执行文件“server”的子目录中调用make。但是,如果我更改组成服务器的其中一个文件,则父make不会看到更改并拒绝重建服务器 - “make:`server'是最新的。”

如何让master makefile正确检测其中一个相关文件的变化(例如$(SERVERDIR)/server.c)?

3 个答案:

答案 0 :(得分:7)

看起来你想要使用虚假目标

.PHONY: server
server:
     @cd $(SERVERDIR) && $(MAKE)

有一个关于Phony目标here的详细描述,但简短的描述是你告诉makefile永远不会有一个与这个服务器目标对应的文件,因此它不会考虑服务器如果目录中有一个名为server的文件,则为最新版本。

答案 1 :(得分:1)

您的目标名称与主Makefile目录中某个文件或目录的名称相匹配。

假设您需要在名为server的子目录中构建所有内容,此规则:

server:
    $(MAKE) -C server

不起作用,因为目标server是一个目录,没有源文件,因此不需要构建。

这一个:

srv:
    $(MAKE) -C server
只要没有名为srv的文件或目录,

就可以工作。

答案 2 :(得分:1)

你没有:

但是,如果你别无选择,例如因为您不控制子makefile,所以您正在寻找.PHONY目标。