makefile:: *** 先决条件不能在配方中定义。停止

makefile:: *** prerequisites cannot be defined in recipes. Stop

我正在执行以下帖子中的脚本。因为它有点旧,我想打开这个新线程,因为我在 运行 makefile 时遇到问题。

基本上我已经创建了一个顶级生成文件,它将在子文件夹中编译一组 docker 个图像。

# Assuming each subdirectory containins a Dockerfile
IMAGES  := $(patsubst %/,%,$(dir $(wildcard */Dockerfile)))
BUILD_TARGS = $(patsubst %,build_%,$(IMAGES))
TEST_TARGS = $(patsubst %,test_%,$(IMAGES))
PUSH_TARGS = $(patsubst %,push_%,$(IMAGES))

VERSION := 1 # $(shell git rev-parse --short=12 --verify HEAD)
DOCKER_REPO_URL := david.io/reponame

define docker_build =
build_$(1):
    @echo "Building $(1)"
    #docker build -t $(1) --force-rm $(1)
endef

define docker_test =
test_$(1):
    @echo "Testing $(1)"
    #docker inspect $(1)
    #docker run --rm $(1) help
endef

define docker_push =
push_$(1):
    @echo "Pushing $(1)"
    #docker tag $(1) $(DOCKER_REPO_URL):$(1)-$(VERSION)
    #docker push $(DOCKER_REPO_URL):$(1)-$(VERSION)
    #docker tag $$@ $(DOCKER_REPO_URL):$(1)
    #docker push $(DOCKER_REPO_URL):$(1)
endef

.PHONY: all build test release clean $(IMAGES) $(BUILD_TARGS) $(TEST_TARGS) $(PUSH_TARGS)

all: build test release

build: $(BUILD_TARGS)
    $(foreach image,$(IMAGES),$(eval $(call docker_build,$(image))))

#test: $(TEST_TARGS)
#    $(foreach image,$(IMAGES),$(eval $(call docker_test,$(image))))

#release: $(PUSH_TARGS)
#    $(foreach image,$(IMAGES),$(eval $(call docker_push,$(image))))

我有以下错误:

makefile:37: *** prerequisites cannot be defined in recipes.  Stop.

正如错误所说,您无法评估配方中的整个规则。

您需要在 make 解析 makefile 时执行此操作。

删除 foreach 循环之前的 TAB 字符,使它们不在配方中。