Makefile “怎么做?”;制造;如果未指定目标,应用程序是否知道要生成的默认目标?

Makefile “怎么做?”;制造;如果未指定目标,应用程序是否知道要生成的默认目标?,makefile,Makefile,大多数linux应用程序都是通过以下方式编译的: make make install clean 据我所知,make将构建目标的名称作为参数。因此,install是复制一些文件的目标,之后,clean是删除临时文件的目标 但是,如果没有指定参数(例如,我的示例中的第一个命令),将生成哪个目标?默认情况下,它首先处理第一个目标,该目标不以aka开头;要做到这一点,它可能必须处理其他目标——特别是第一个目标所依赖的目标 GNU Make涵盖了所有这些内容,阅读起来非常简单且信息丰富。GNU Mak

大多数linux应用程序都是通过以下方式编译的:

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


但是,如果没有指定参数(例如,我的示例中的第一个命令),
将生成哪个目标?

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


GNU Make涵盖了所有这些内容,阅读起来非常简单且信息丰富。

GNU Make还允许您使用名为
.default\u GOAL
的特殊变量指定默认的Make目标。您甚至可以在Mag文件中间取消该变量,使文件中的下一个目标成为默认目标。
参考:

为了节省他人几秒钟的时间,并使他们不必阅读手册,以下是简短的答案。将以下内容添加到make文件的顶部:

.DEFAULT_GOAL := mytarget
.PHONY: default
default: mytarget ;
如果执行“make”且未指定目标,则mytarget现在将是运行的目标


如果您有旧版本的make(调用第一个目标
all
只是一种约定。如果您正在为其他用户安装,则单独运行它们很有用,因为您只需要在sudo中运行
make install
,而不需要运行整个构建。仅供参考,make的默认man条目不提及在未指定目标时会发生什么情况。。如果e手册涵盖了这些内容,为什么会问这个问题?手册非常擅长记录如何编写规则,但没有提到如何编写Makefile。我正在查看一个包含另一个Makefile的Makefile,其第一个目标是
%.o:%.cpp
。所以默认目标是…构建所有.cpp文件?@nathan It Makefilemytarget如果有人在没有任何参数的情况下运行“make”,那么它就是默认的目标。请注意.default\u目标在GNU make v3.80中似乎不受支持,我假设以前的版本也支持它(尽管v3.81支持它)。如果您运行的是旧版本的make,则必须确保默认目标是make文件中的第一个/最上面的目标。“…将他们从阅读手册中解救出来”是SO的要点之一:快速回答在古代文档中可能需要一段时间才能找到的问题。“将此添加到make文件的顶部”:添加到顶部似乎不是一个要求。这应该是正确的答案。在这种情况下,显式胜于隐式。