如果没有指定目标,“make”应用程序如何知道构build默认目标?

大多数的Linux应用程序编译为:

make make install clean 

据我所知,make使用构build目标的名字作为参数。 因此, install是复制一些文件的目标,然后clean是一个删除临时文件的目标。

但是如果没有指定参数,那么目标是什么?(例如我的例子中的第一个命令)?

默认情况下,它从处理第一个不以“。”开头的目标开始。 又名默认目标 ; 要做到这一点,可能需要处理其他目标 – 具体来说,第一个目标所依赖的目标。 GNU make手册涵盖了所有这些内容,并且是一个令人惊讶的容易和信息性的阅读。

为了节省几秒钟的时间,并且不必阅读手册,以下是简短的答案。 将其添加到make文件的顶部:

 .DEFAULT_GOAL := mytarget 

如果执行“make”并且没有指定目标,mytarget将成为运行的目标。

如果你有一个老版本的make(<= 3.80),这是行不通的。 如果是这种情况,那么你可以做什么,只要把它添加到你的make文件的顶部:

 .PHONY: default default: mytarget ; 

参考资料: https : //www.gnu.org/software/make/manual/html_node/How-Make-Works.html

GNU Make也允许你使用一个叫做.DEFAULT_GOAL的特殊variables来指定默认的make目标。 你甚至可以在makefile的中间取消这个variables,导致文件中的下一个目标成为默认目标。

真正有趣但深奥的东西。 但是我同意在那里 – gnu make手册是相当可读的。 你可能会认为你不需要知道其中的大部分内容,但是一旦你看到了一个非常全面的内容,你将会非常欣赏一些你可以用它做的奇特的事情 – string操作,文件/目录function,等等

参考: Gnu Make手册 – 特殊variables