Bash 使仅运行列出的第一个依赖项

Bash 使仅运行列出的第一个依赖项,bash,makefile,Bash,Makefile,我正在编写一个makefile,它接受三个目标: make build-consul make build-envoy make build # (builds both) 构建领事/构建特使任务按预期自行工作。但是,build任务只运行第一个依赖项。考虑下面的Mag文件: %consul: APP=consul %envoy: APP=envoy build-consul: _build build-envoy: _build build: build-consul build-env

我正在编写一个makefile,它接受三个目标:

make build-consul
make build-envoy

make build # (builds both)
构建领事
/
构建特使
任务按预期自行工作。但是,
build
任务只运行第一个依赖项。考虑下面的Mag文件:

%consul: APP=consul
%envoy: APP=envoy

build-consul: _build
build-envoy: _build

build: build-consul build-envoy
_build:
  echo building $(APP)
运行
构建
目标的输出为:

$ make build
echo working on consul
working on consul

为什么只运行第一个依赖项
build-concur
,而忽略第二个依赖项
build-envision
?对于
build
任务,首先列出的依赖项似乎总是运行的(如果我交换它们,那么
embasic
就是输出。

我没有注意到您将
make build
指定为命令行


在这种情况下,请看下面的答案:

这是因为
构建领事和
构建特使自己什么都不做。它们都依赖于一个单独的目标
\u build
,该目标将始终执行一次。当
make
访问
构建领事时,它会重新生成
\u build
目标(因为该文件可能不存在)并且当以后涉及到
构建特使
时,它不会重新生成
\u build
目标,因为这已经生成。请参见:

$ make build -dr
Considering target file 'build'.
 File 'build' does not exist.
 Looking for an implicit rule for 'build'.
 No implicit rule found for 'build'.
  Considering target file 'build-consul'.
   File 'build-consul' does not exist.
   Looking for an implicit rule for 'build-consul'.
   No implicit rule found for 'build-consul'.
    Considering target file '_build'.
     File '_build' does not exist.
     Finished prerequisites of target file '_build'.
    Must remake target '_build'.
echo building consul
Putting child 0x55931292b870 (_build) PID 8627 on the chain.
Live child 0x55931292b870 (_build) PID 8627
building consul
Reaping winning child 0x55931292b870 PID 8627
Removing child 0x55931292b870 PID 8627 from chain.
    Successfully remade target file '_build'.
   Finished prerequisites of target file 'build-consul'.
  Must remake target 'build-consul'.
  Successfully remade target file 'build-consul'.
  Considering target file 'build-envoy'.
   File 'build-envoy' does not exist.
   Looking for an implicit rule for 'build-envoy'.
   No implicit rule found for 'build-envoy'.
    Pruning file '_build'.                            <--- Already built, not making again
   Finished prerequisites of target file 'build-envoy'.
  Must remake target 'build-envoy'.
  Successfully remade target file 'build-envoy'.
 Finished prerequisites of target file 'build'.
Must remake target 'build'.
Successfully remade target file 'build'.
.PHONY
是确保即使存在同名文件也能生成目标(良好做法)

输出:

$ make build
echo building consul
building consul
echo building envoy
building envoy

这难道不等于我所拥有的吗?
build:build-consur-build-emission
。我没有使用默认目标,而是在命令行
make-build
上指定目标。
$ make build
echo building consul
building consul
echo building envoy
building envoy