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

大多数Linux应用程序都是用以下方法编译的:

make
make install clean

根据我的理解,make命令接受构建目标的名称作为参数。例如,install通常是将一些文件复制到标准位置的目标,而clean是删除临时文件的目标。

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

181963 次浏览

默认情况下,它首先处理第一个不是以.默认目标开头的目标;要做到这一点,它可能必须处理其他目标——特别是第一个目标所依赖的目标。

GNU制作手册涵盖了所有这些东西,是一个令人惊讶的简单和信息丰富的阅读。

GNU Make还允许你使用一个叫做.DEFAULT_GOAL的特殊变量来指定默认的Make目标。您甚至可以在Makefile中间取消设置这个变量,从而使文件中的下一个目标成为默认目标。

裁判:Gnu制作手册-特殊变量

为了节省别人几秒钟的时间,也为了让他们不必阅读手册,下面是简短的答案。把这个添加到make文件的顶部:

.DEFAULT_GOAL := mytarget

Mytarget现在将是如果执行“make”并且没有指定目标时运行的目标。

如果您使用的是旧版本的make (<= 3.80),那么这将不起作用。如果是这样,那么你可以做anon提到的,简单地添加到你的make文件的顶部:

.PHONY: default
default: mytarget ;
< p >引用: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html < / p >

bmake的等价GNU Make的.DEFAULT_GOAL.MAIN:

$ cat Makefile
.MAIN: foo


all:
@echo all


foo:
@echo foo
$ bmake
foo

参见Bmake(1)手册页