今天碰到个鬼问题,坑了半天时间
编译的时候,configure,然后make,在make的时候中间步骤一大堆,先是生成了一个.c,然后怎么又要调用一个.y文件,然后让上面一堆.c中间文件产生.o文件,然后用ar归档生成一个.a文件,然后还runlib了下这.a文件,最后一窝蜂地-o完毕,突然发现我怎么念叨了这么多“然后”
编译来编译去,报错一堆函数没定义,也就是中间库文件生成有问题,而所需要的库文件也是由一堆中间文件生成的,Makefile也是生成的,我使劲make clean,就是编译不通过,甚至出现了偶尔一次成功了,copy到另一个目录,再编译就失败了,我主要怀疑坏境变量设置的问题,最后搞来搞去,才发现居然是这一系列步骤产生的中间文件捣的鬼,只要第一次编译出错,部分中间文件已经生成,但是make clean并没有完全清理干净,具体得看Makefile怎么写的,下次再编译可能用的中间文件就会有问题,所以必须要用make distclean来回到初始面貌,前提是有distclean
由于之前从来没碰到这个问题,偶然碰到太伤了,也说明经验比较弱,Makefile甚至configure,autogen这一套了解的太肤浅,干咱们这行的,首先不说自身水平很弱,每天没进步一点点就意味着倒退,摩尔定律18个月晶体管都增加了一倍了呢,鸭梨山大
make clean:一般来说,仅仅会clean掉编译产生的.o文件,至于其它中间文件是否会清理得看具体Makefile怎么写的或者说生成Makefile的地方怎么写的,我今天这个例子里clean就不会清理中间的关键性.c文件
make distclean:一般来说,这个就比较猛,应该会吧configure产生的任何中间包括Makefile都给清理掉,会回到原始source code的面貌