下面这段是我的Makefile代码,所有的目标都定义成伪目标了,为什么我在终端中输入: make后
“all”这个目标还是执行了呢?GNU make中不是说用.PHONY定义过的目标只用在输入: make [目标名]才执行规则中的命令的吗?
请解释一下。谢谢。
“RM = rm -f
.PHONY: all
all:message
.PHONY: message
message:
@echo "make makehello to build hello"
@echo "make clean to clean files"
.PHONY: test
test:
$(MAKE) -C hello hello
echo $(CONFIG_SHELL)
.PHONY: clean
clean:
$(MAKE) -C hello clean
$(RM) *~
echo $(RM)
makedir:
mkdir -p tmp
”
于 2013-09-06 18:28:55发表:
一年之后路过
lemonliucy 于 2012-12-13 17:24:01发表:
最近在看makefile的相关资料,可能能够帮你解决一些疑惑。
在资料里面说了,伪目标其实系统就是把它当做一个目标的,只是因为这个目标一般不带有依赖文件,所以才不会被执行。但是例外的是,如果一个伪目标被放在了makefile文件的开头,那么makefile会把这个伪目标当做是整个文件的目标。因为一般来说,一个makefile中只会存在一个“终极目标”,并且这个“终极目标”是一定会被执行的。所以,在你提供的makefile文件中,all这个伪目标被放在了第一个被发现的位置,所以makefile认定这个就是“终极目标”,结果就导致了就算你只输入make命令,all指令也会被执行。
虽然时隔5年,但是希望对你和其他看到这个帖子的朋友有帮助!
njay-lian 于 2007-09-06 13:02:24发表:
怎么没人答复?