4

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

例如,如果我有规则

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

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

如何让主 makefile 正确检测其中一个依赖文件(例如 $(SERVERDIR)/server.c 之类的文件)何时发生更改?

4

3 回答 3

7

看起来您想使用虚假目标

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

这里有 Phony 目标的详细描述,但简短的描述是你告诉 makefile 永远不会有与此服务器目标对应的文件,因此如果有目录中名为 server 的文件。

于 2009-02-17T15:31:34.537 回答
1

您的目标名称与主目录中的文件或目录之一的名称相匹配Makefile

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

server:
    $(MAKE) -C server

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

这个:

srv:
    $(MAKE) -C server

只要没有名为srv.

于 2009-02-17T14:46:55.160 回答
1

你不:

但是是的,如果您别无选择,例如因为您无法控制子生成文件,.PHONY那么您正在寻找目标。

于 2009-02-17T16:06:49.927 回答