如果没有指定目标,“make”app如何知道要构建的默认目标?

时间:2010-01-13 15:15:38

标签: makefile

大多数Linux应用程序都使用以下编译:

make
make install clean

据我了解,make将构建目标的名称作为参数。因此install是复制某些文件的目标,之后clean是删除临时文件的目标。

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

4 个答案:

答案 0 :(得分:199)

默认情况下,它首先处理不以'。'开头的第一个目标。又名the default goal;要做到这一点,它可能必须处理其他目标 - 特别是第一个目标依赖的目标。 GNU make manual涵盖了所有这些内容,并且是一个令人惊讶的简单和信息丰富的阅读。

答案 1 :(得分:142)

为了节省他人几秒钟,为了避免他们阅读手册,这里是简短的回答。将其添加到make文件的顶部:

.DEFAULT_GOAL := mytarget

mytarget现在将成为运行的目标,如果" make"执行时没有指定目标。

如果你有一个较旧版本的make(< = 3.80),这不会起作用。如果是这种情况,那么您可以执行anon提到的操作,只需将其添加到make文件的顶部:

.PHONY: default
default: mytarget ;

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

答案 2 :(得分:31)

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

非常有趣,但深奥的东西。但我同意那里的东西 - gnu make手册非常易读。你可能认为你不需要知道其中的大部分东西,但是一旦你看到一个非常全面的东西,你会非常感谢你能用它做的一些非常奇特的东西 - 字符串操作,文件/目录函数,等

参考:The Gnu Make manual - Special Variables

答案 3 :(得分:1)

bmake 相当于 GNU Make 的 .DEFAULT_GOAL.MAIN

$ cat Makefile
.MAIN: foo

all:
    @echo all

foo:
    @echo foo
$ bmake
foo

参见bmake(1) manual page