1

我是makefile的新手。我有一个带有以下语句的makefile:

....

all: prepare hreader $(DIRS)
    echo $(DIRS)

.PHONY: prepare hreader $(DIRS)

prepare:                              
    mkdir -p ./lib
    $(MAKE) -C game_proc prepare     #here, why 'prepare'?!

hreader:
    make -C extra/hreader

$(DIRS):
    $(MAKE) -C $@

在我的 makefile 目录中,我有一个“game_proc”目录。从 GNU make 教程,我知道下面几行

prepare:                           
    mkdir -p ./lib
    $(MAKE) -C game_proc

将对“game_proc”进行递归制作。

但为什么“准备”也出现在食谱中?现在我如何解释'$(MAKE)-C game_proc prepare'?它在“game_proc”上进行递归,什么?也是“准备”的递归制作?

谢谢,

4

1 回答 1

1

虚假目标只是告诉 make 该规则不会创建该名称的输出文件。

评论后更新

好的,重要的是要意识到这里有两个单独的 makefile:

./Makefile

game_proc/Makefile

混淆是由于两个sprepare中都有一个目标。 Makefile

即,有game_proc/Makefile一个目标prepare。让我们暂时将该目标重命名为,prepare2以便情况变得更加清晰:

./Makefile:

    .PHONY: prepare hreader $(DIRS)

prepare:                              
    mkdir -p ./lib
    $(MAKE) -C game_proc prepare2 # refers to game_proc/Makefile's prepare2 target

game_proc/Makefile:

prepare2:
    ...
于 2012-12-08T09:55:19.943 回答