Build Makefile中所有目标的行为

Build Makefile中所有目标的行为,build,makefile,Build,Makefile,我有以下生成文件: DESTFILES = build/test1 build/toto2 build/test1: test1 cp $< $@ build/toto2: toto2 cp $< $@ all: build/test1 build/toto2 DESTFILES=build/test1 build/totot2 build/test1:test1 cp$

我有以下生成文件:

DESTFILES = build/test1 build/toto2

build/test1: test1
    cp $< $@

build/toto2: toto2
    cp $< $@

all:    build/test1 build/toto2
DESTFILES=build/test1 build/totot2
build/test1:test1
cp$<$@
构建/toto2:toto2
cp$<$@
全部:构建/测试1构建/测试2
Makefile所在的目录包含
build
子目录和
test1
tototo2
空文件

目的是将文件复制到build子目录(la
makeinstall

执行
makeall
命令时,文件会在
build
中正确复制。 但是当我只做
make
时,只会触发
all
的第一个目标,
test1
,因此只复制第一个文件

我对这种行为感到非常惊讶。有人能告诉我这件事吗


这是Archlinux上的GNU Make 4.1。

对于GNU Make,默认目标(仅键入
Make
时完成的目标)是第一个名称不以“.”开头的目标
all
只是一个名称,GNU make对它没有任何特殊作用。如果要将其设置为默认值,请将其置于第一个位置或使用特殊的
。默认值\u目标
变量:

.DEFAULT_GOAL := all

也许值得一提的是
.DEFAULT\u目标
。这可以让你定义默认的目标,而不管它在什么位置。很好。我更新了我的答案,还提到在定义默认目标时不考虑以“.”开头的目标名称。谢谢