日期:2014-05-16  浏览次数:20574 次

再问makefile问题
ldd2中的scull的mekafile中有以下代码:
depend   .depend   dep:
$(CC)   $(CFLAGS)   -M   *.c   >   $@


ifeq   (.depend,$(wildcard   .depend))
include   .depend
endif
-------------------------------------
请问:
1.depend   .depend   dep是伪目标或者多目标吗?为什么要定义3个,这3者之间是什么关系?在直接输入make命令的情况下它们会被执行吗?
2.-M是自动搜索依赖关系吗?
3.为什么ifeq中使用的是.depend而不是depend或dep?
4.$(wildcard   .depend)展开的是什么?

------解决方案--------------------
1.depend .depend dep是伪目标或者多目标吗?为什么要定义3个,这3者之间是什么关系?在直接输入make命令的情况下它们会被执行吗? 
--是三个独立的目标有同样的依赖关系,并且用同样的规则去生成目标,当然这里是没有依赖关系,通过cc命令可以生成。在直接输入make命令下,有两种情况别执行,一,他们就是Makefile中的第一个目标,二,他们被第一个目标直接或者间接依赖。否则不能。
2.-M是自动搜索依赖关系吗? 
--该选项会生成依赖关系并且讲该关系象标准输出设备输出。这里被重定向到文件中。
3.为什么ifeq中使用的是.depend而不是depend或dep? 
--这只是选择而已,页可以用后面的啊。不过你这里要包含.depend,所以自然会选择前者。
4.$(wildcard .depend)展开的是什么
--如果.depend存在,就是.depend,否则是空串。进而就用于ifeq判断文件是否存在。如果是.depend,判断相等,那么我呢见存在;如果是空串,必然比相等。