makefile - makefile:: *** 无法在配方中定义先决条件。停止
问题描述
我正在从以下帖子中实现脚本。由于它有点旧,我想打开这个新线程,因为我在运行 makefile 时遇到问题。
基本上我已经创建了一个顶级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 字符,以便它们不在配方中。
推荐阅读
- python - 如何将 Raspberry 上的 HC sr04 与 Flask 网站上的工作代码连接起来?
- javascript - 格式化从 Reddit API 导入的文本
- amazon-web-services - CloudFront 路径模式是否需要作为目录存在于 S3 中?
- wpf - 仅启用一个 WPF 应用程序实例
- python - Python 3 - ImportError:无法导入名称
- asp.net-core - asp.net 核心主卡支付网关未重定向到支付页面
- view - 在单个视图中显示所有重力形式的条目
- amazon-web-services - 在 Cloudfront 后面为 S3 提供 2 个来源
- python - 由于“数组太大”的值错误而替代 pandas.merge?
- django - 从 SQLite 到 Postgres Django 的数据库迁移问题