Makefile 中 all 目标的行为

Behavior of the all target in Makefile

我有以下生成文件:

DESTFILES = build/test1 build/toto2

build/test1: test1
    cp $< $@

build/toto2: toto2
    cp $< $@

all:    build/test1 build/toto2

Makefile所在的目录包含build个子目录和test1toto2个空文件。

目的是将文件复制到构建子目录(a la make install)。

当我执行 make all 命令时,文件被适当地复制到 build 中。 但是,当我只执行 make 时,只会触发 alltest1 的第一个目标,因此只会复制第一个文件。

我对这种行为感到非常惊讶。任何人都可以启发我吗?

这是 Archlinux 上的 GNU Make 4.1。

对于 GNU make,默认目标(当您键入 make 时完成的目标)是第一个名称不以 '.' 开头的目标。 all 只是一个名字,GNU make 没有用它做任何特别的事情。如果您希望它成为默认值,请将其放在第一位或使用特殊的 .DEFAULT_GOAL 变量:

.DEFAULT_GOAL := all