***没有规则可以创建“XXX”需要的目标“XXX”问题的解决方案

转载请注明出处:snowboy.blog.chinaunix.net

每个诡异错误的背后。都隐藏着一个低级错误。真理重新得到验证。正如只所以会有这篇博文也是如此,拿别人的一个uboot源码直接过来编译,操作如下:

顶层Makefile已经生成完毕
#make clean
#make mini2440_config
#make
出现错误如下:
***没有规则可以创建鈥淴XX鈥澬枰哪勘赈淴XX鈥澪侍獾慕饩龇桨
 
给我的第一感觉分析,我该清的都清了,前面不是已经做了make clean操作了么?现在是不是Makefile出现了问题,我该源码具备的编译环境,我的源码需要放在特定的路径下编译,种种答案一一尝试,而该问题给我的回应是无止无休的***没有规则可以创建***类似的错误。所有的方法用尽,最后来了个大扫除,make  distclean,再make mini2440_config,make,编译竟然一次性通过,没有任何问题。截图如下:
***没有规则可以创建鈥淴XX鈥澬枰哪勘赈淴XX鈥澪侍獾慕饩龇桨
 
对于问题不能知其然而不知其所以然,毛主席教导我们要有实事求是的作风,本人也一直秉着必须要知其然也知其所以然的态度,下面让我们来探究一下,为什么make distclean可以解决这个问题。
 
首先我们不得不提到:make clean 和make distclean的区别:
make clean仅仅是清除之前编译的可执行文件及配置文件。
而make distclean要清除所有生成的文件
make distclean类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。
 
我们本着拿来主义的精神,但是拿来主意也让我们的人生道路中荆棘丛丛,从上面的解析可以看出,上面的问题的根源是因为,经过拿来主义的代码里面已经有配置文件,是根据原来的编译环境生成的,仅仅通过make clean并不能清楚之前的配置文件,没有清除之前的配置文件就进行编译,编译器本着相信程序员的态度,编译时不会产生新的configure生成的附带文件,而是根据原来的configure生成的文件进行编译,这样就会导致上面的一系列编译错误。make distclean可以将所有的垃圾,之前环境所有的余孽清理干净,这样就不会给编译器偷懒的机会。那么一个馒头引发的血案就解析完毕。
posted @ 2013-04-23 10:39  @菜鸟爱学习@  阅读(1044)  评论(0编辑  收藏  举报