这个是我自己总结的:<br />makefile的规则:<br /> target ... : requisites ...<br /> command<br /> ...<br /> ...<br />第一行称为规则,第二行是执行规则的命令。<br /><br />target是一个目标文件,可以是Object File,也可以是执行文件;requisites是生成这个target的所有依赖文件;command是完成这个操作的shell命令。<br /><br />target也可以当作伪目标,此时command为空,用于一个项目中要生成多个相互独立的目标文件。这些需要生成的独立的目标文件全部当作target伪目标的依赖文件,却没有实际生成它的命令,但make依然会试图更新所有依赖文件,这样就达到了预期的目的。<br /><br />target还可以是一个标签,当其作为标签时,冒号后面不写依赖文件。所以这时它不是一个文件,只不过是一个动作的名字,像C语言中的lable一样,make不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make命令后明显得指出这个lable的名字。利用这个特性,可以在一个makefile中定义不用的编译或是和编译无关的命令,比如程序的打包,备份,删除中间文件等等,需要完成这些操作时,执行一下“make (lable)”就可以了。<br /><br />所以你说的all是作为伪目标来用的,也就是最后一种情况,那堆make才是真正希望执行的命令。
|