Bash 使仅运行列出的第一个依赖项
我正在编写一个makefile,它接受三个目标: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
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