如果未指定目标,“ make”应用程序如何知道要构建的默认目标?


186

大多数Linux应用程序使用以下命令进行编译:

make
make install clean

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

但是,make如果未指定任何参数(例如,在我的示例中为第一个命令),将建立什么目标?

Answers:


231

默认情况下,它开始通过处理不以开始第一目标.又名默认的目标 ; 为此,它可能必须处理其他目标-特别是第一个目标所依赖的目标。

GNU Make手册》涵盖了所有这些内容,并且非常容易阅读且内容丰富。


61
调用第一个目标all只是一个约定。
东武

1
如果您要为其他用户安装,则分别运行它们很有用,因为您只需要在make installin sudo中运行而不是在整个构建中运行。
斯科特·威尔士

2
FYI默认的男人条目化妆没有提到的,当你不指定一个目标会发生什么..
Sekm

2
如果GNU make手册涵盖了这些内容,为什么会问这个问题?该手册非常擅长记录如何编写规则,但是没有提及如何编写Makefile。
尼克

1
我正在查看的是include另一个makefile 的make文件,其第一个目标是%.o : %.cpp。因此,默认目标是...生成所有.cpp文件?
Qwertie

175

为了节省他人几秒钟的时间,并避免他们不得不阅读手册,这是简短的答案。将此添加到您的make文件的顶部:

.DEFAULT_GOAL := mytarget

如果执行了“ make”并且未指定任何目标,则mytarget现在将成为运行的目标。

如果您使用的是make(<= 3.80)的旧版本,则将无法使用。如果是这种情况,那么您可以执行anon提到的操作,只需将其添加到make文件的顶部即可:

.PHONY: default
default: mytarget ;

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


1
@nathan如果有人运行不带任何参数的“ make”,它将mytarget设置为默认目标。
塞缪尔

1
注意,.DEFAULT_GOAL在GNU make v3.80中似乎不受支持,我也假定以前的版本(尽管v3.81确实支持它)。如果运行的是较旧版本的make,则必须确保默认目标是make文件中的第一个/最高目标。
塞缪尔

4
SO的要点之一是“ ...使他们不必阅读手册”:快速回答问题,而这些问题原本需要一段时间才能在古代文献中找到。
WattsInABox

1
“将其添加到生成文件的顶部”:似乎不是必需的。
阿曼(Aman Deep Gautam)

2
这应该是正确的答案。在这种情况下,显式胜过隐式获胜。
Sion

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.