红联Linux门户
Linux帮助

makefile中伪目标的疑问

发布时间:2007-09-05 11:49:12来源:红联作者:njay-lian
下面这段是我的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
文章评论

共有 3 条评论

  1. 于 2013-09-06 18:28:55发表:

    一年之后路过

  2. lemonliucy 于 2012-12-13 17:24:01发表:

    最近在看makefile的相关资料,可能能够帮你解决一些疑惑。
    在资料里面说了,伪目标其实系统就是把它当做一个目标的,只是因为这个目标一般不带有依赖文件,所以才不会被执行。但是例外的是,如果一个伪目标被放在了makefile文件的开头,那么makefile会把这个伪目标当做是整个文件的目标。因为一般来说,一个makefile中只会存在一个“终极目标”,并且这个“终极目标”是一定会被执行的。所以,在你提供的makefile文件中,all这个伪目标被放在了第一个被发现的位置,所以makefile认定这个就是“终极目标”,结果就导致了就算你只输入make命令,all指令也会被执行。
    虽然时隔5年,但是希望对你和其他看到这个帖子的朋友有帮助!

  3. njay-lian 于 2007-09-06 13:02:24发表:

    怎么没人答复?