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
个子目录和test1
、toto2
个空文件。
目的是将文件复制到构建子目录(a la make install
)。
当我执行 make all
命令时,文件被适当地复制到 build
中。
但是,当我只执行 make
时,只会触发 all
、test1
的第一个目标,因此只会复制第一个文件。
我对这种行为感到非常惊讶。任何人都可以启发我吗?
这是 Archlinux 上的 GNU Make 4.1。
对于 GNU make,默认目标(当您键入 make
时完成的目标)是第一个名称不以 '.' 开头的目标。 all
只是一个名字,GNU make 没有用它做任何特别的事情。如果您希望它成为默认值,请将其放在第一位或使用特殊的 .DEFAULT_GOAL
变量:
.DEFAULT_GOAL := all
我有以下生成文件:
DESTFILES = build/test1 build/toto2
build/test1: test1
cp $< $@
build/toto2: toto2
cp $< $@
all: build/test1 build/toto2
Makefile所在的目录包含build
个子目录和test1
、toto2
个空文件。
目的是将文件复制到构建子目录(a la make install
)。
当我执行 make all
命令时,文件被适当地复制到 build
中。
但是,当我只执行 make
时,只会触发 all
、test1
的第一个目标,因此只会复制第一个文件。
我对这种行为感到非常惊讶。任何人都可以启发我吗?
这是 Archlinux 上的 GNU Make 4.1。
对于 GNU make,默认目标(当您键入 make
时完成的目标)是第一个名称不以 '.' 开头的目标。 all
只是一个名字,GNU make 没有用它做任何特别的事情。如果您希望它成为默认值,请将其放在第一位或使用特殊的 .DEFAULT_GOAL
变量:
.DEFAULT_GOAL := all