我是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'做了递归制作,什么?也是'准备'的递归制作?
谢谢,
答案 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:
...