这是如何使语法工作的?

时间:2012-12-08 09:46:51

标签: makefile gnu-make

我是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准备'?它对'game_proc'做了递归制作,什么?也是'准备'的递归制作?

谢谢,

1 个答案:

答案 0 :(得分:1)

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

评论后更新

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

./Makefile

game_proc/Makefile

由于 prepare中存在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:
    ...