大多数Linux应用程序都使用以下编译:
make
make install clean
据我了解,make将构建目标的名称作为参数。因此install
是复制某些文件的目标,之后clean
是删除临时文件的目标。
但如果没有指定参数(例如我的例子中的第一个命令),那么make
构建的目标是什么?
答案 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手册非常易读。你可能认为你不需要知道其中的大部分东西,但是一旦你看到一个非常全面的东西,你会非常感谢你能用它做的一些非常奇特的东西 - 字符串操作,文件/目录函数,等
答案 3 :(得分:1)
bmake 相当于 GNU Make 的 .DEFAULT_GOAL
是 .MAIN
:
$ cat Makefile
.MAIN: foo
all:
@echo all
foo:
@echo foo
$ bmake
foo