大多数Linux应用程序都是用以下方法编译的:
make
make install clean
根据我的理解,make命令接受构建目标的名称作为参数。例如,install通常是将一些文件复制到标准位置的目标,而clean是删除临时文件的目标。
但是如果没有指定参数(例如,我的例子中的第一个命令),什么目标将进行构建?
大多数Linux应用程序都是用以下方法编译的:
make
make install clean
根据我的理解,make命令接受构建目标的名称作为参数。例如,install通常是将一些文件复制到标准位置的目标,而clean是删除临时文件的目标。
但是如果没有指定参数(例如,我的例子中的第一个命令),什么目标将进行构建?
当前回答
bmake等价于GNU Make的.DEFAULT_GOAL是.MAIN:
$ cat Makefile
.MAIN: foo
all:
@echo all
foo:
@echo foo
$ bmake
foo
参见bmake(1)手册页。
其他回答
bmake等价于GNU Make的.DEFAULT_GOAL是.MAIN:
$ cat Makefile
.MAIN: foo
all:
@echo all
foo:
@echo foo
$ bmake
foo
参见bmake(1)手册页。
GNU Make还允许您使用一个名为. default_goal的特殊变量指定默认的Make目标。您甚至可以在Makefile中间取消设置这个变量,从而使文件中的下一个目标成为默认目标。
参考:Gnu制作手册-特殊变量
为了节省别人几秒钟的时间,也为了让他们不必阅读手册,下面是简短的答案。把这个添加到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
默认情况下,它首先处理第一个不是以属性开头的目标。也就是默认目标;要做到这一点,它可能必须处理其他目标——特别是第一个目标所依赖的目标。
GNU制作手册涵盖了所有这些内容,是一本令人惊讶的简单和信息丰富的读物。