大多数 Linux 应用程序编译时使用:
make
make install clean
据我了解,make
命令将构建目标的名称作为参数。因此,例如 install
通常是将一些文件复制到标准位置的目标,而 clean
是删除临时文件的目标。
但是如果没有指定参数(例如我的示例中的第一个命令),make
将构建什么目标?
默认情况下,它首先处理不以 .
aka the default goal 开头的第一个目标;为此,它可能必须处理其他目标 - 特别是第一个目标所依赖的目标。
GNU Make Manual 涵盖了所有这些内容,阅读起来非常简单且内容丰富。
为了节省其他人几秒钟的时间,并使他们不必阅读手册,这里是简短的答案。将此添加到 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
default:
是一个特殊的目标名称,还是因为它是文件中的第一个目标而起作用?
GNU Make 还允许您使用名为 .DEFAULT_GOAL
的特殊变量指定默认的 make 目标。您甚至可以在 Makefile 中间取消设置此变量,使文件中的下一个目标成为默认目标。
参考:The Gnu Make manual - Special Variables
bmake 相当于 GNU Make 的 .DEFAULT_GOAL
是 .MAIN
:
$ cat Makefile
.MAIN: foo
all:
@echo all
foo:
@echo foo
$ bmake
foo
请参阅 bmake(1) manual page。
all
只是一个约定。make install
,而不是整个构建。include
是另一个 makefile 的 make 文件,它的第一个目标是%.o : %.cpp
。所以默认目标是......构建所有 .cpp 文件?