Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121641
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 296
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-10 21:57
文章分类

全部博文(31)

文章存档

2016年(4)

2015年(27)

我的朋友

分类: LINUX

2015-01-16 14:55:31

------------------------------------------
本文为本人原创,欢迎转载!
转载请注明出处:snowboy.blog.chinaunix.net
雪夜流星
------------------------------------------
每个诡异错误的背后。都隐藏着一个低级错误。 真理重新得到验证。正如只所以会有这篇博文也是如此,拿别人的一个uboot源码直接过来编译,操作如下:
顶层Makefile已经生成完毕
#make clean
#make mini2440_config
#make
出现错误如下:

给我的第一感觉分析,我该清的都清了,前面不是已经做了make clean操作了么?现在是不是Makefile出现了问题,我该源码具备的编译环境,我的源码需要放在特定的路径下编译,种种答案一一尝试,而该问题给我的回应是无止无休的***没有规则可以创建***类似的错误。所有的方法用尽,最后来了个大扫除,make  distclean,再make mini2440_config,make,编译竟然一次性通过,没有任何问题。截图如下:

对于问题不能知其然而不知其所以然,毛主席教导我们要有实事求是的作风,本人也一直秉着必须要知其然也知其所以然的态度,下面让我们来探究一下,为什么make distclean可以解决这个问题。

首先我们不得不提到:make clean 和make distclean的区别:
make clean仅仅是清除之前编译的可执行文件及配置文件。
而make distclean要清除所有生成的文件
make distclean类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。

我们本着拿来主义的精神,但是拿来主意也让我们的人生道路中荆棘丛丛,从上面的解析可以看出,上面的问题的根源是因为,经过拿来主义的代码里面已经有配置文件,是根据原来的编译环境生成的,仅仅通过make clean并不能清楚之前的配置文件,没有清除之前的配置文件就进行编译,编译器本着相信程序员的态度,编译时不会产生新的configure生成的附带文件,而是根据原来的configure生成的文件进行编译,这样就会导致上面的一系列编译错误。make distclean可以将所有的垃圾,之前环境所有的余孽清理干净,这样就不会给编译器偷懒的机会。那么一个馒头引发的血案就解析完毕。
阅读(1436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~