如果我有一个调用另一个makefile的makefile,如何让master makefile正确检查下级makefile的依赖项是否已更改?
例如,如果我有规则
server:
@cd $(SERVERDIR) && $(MAKE)
在我构建可执行文件“server”的子目录中调用make。但是,如果我更改组成服务器的其中一个文件,则父make不会看到更改并拒绝重建服务器 - “make:`server'是最新的。”
如何让master makefile正确检测其中一个相关文件的变化(例如$(SERVERDIR)/server.c)?
答案 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
目标。