make 、make clean、make depend的区别

转自百思论坛

1。make


根据makefile制定的规则,将c\c++文件编译成*.o文件,然后进一步生成可执行文件。

2。make clean

删除源代码(C\C++ code)生成的执行文件和所有的中间目标文件

3.make depend

一种makefile的规则,通过扫描仪个目录下的所有C\C++ 代码,从而判断出文件之间的依赖关系,如a.cc文件中调用了b.h(如以形势include<b.h>),如果之后a.cc文件被改动,那 么只需要重新编译a.cc文件,不需要编译b.h文件。否则所有的文件都需要重新编译

我的疑惑是:既然它们的作用如上,那么make depend之后,再make的话,应该不会有问题吧
主要是我发现,我只要make depend的话,makefile文件就变大了,有几百行变为几万行,执行make命令时还有格式错误:“missing seperator. stop”
请高手解答啊

答:
一般来说,make其实是make all的省略;
make后面跟的是target,即你要编译的目标,在makefile里面会列出。这个target依赖于哪几个别的target,别的target又依赖于另外的target,如此“递归”,最终会到依赖的源文件和头文件;当然,也有可能这个target后面直接就是源文件和头文件(最简单的情况)。

make all和make depend没有本质区别,都是生成某个目标,只是目标名称不同而已;
至于编译的结果,就取决于makefile的写法,如果makefile中目标all和目标depend的依赖一样,那么结果也将是相同的。

你前面列出的make 和make depend的区别没有错,但那只是早些时候大家的约定熟成而已。
你完全可以修改makefile,把他们的功能完全弄反。现阶段,很多软件已经不需要或者不支持make depend了,比如编译linux 2.6的时候,根本不需要make depend,而早期的linux 2.4,则一般需要make depend这一步。
总之,make的目标和功能完全由makefile决定(好像是废话,呵呵),你应该简单了解一下makefile的格式,而不是机 械的记住make depend一定是干什么什么的!我编译过ns2.29,2.30,2.31,2.32,从来没有make depend,用的好好的:)

你可能感兴趣的:(c,linux,makefile)