堆栈或追加Makefile目标



我已经构建了以下Makefile来实现Docker的自动化(即减少记忆和输入长命令)。

.PHONY: help build rebuild up down start stop destroy restart enter ps enable-xdebug disable-xdebug
COMPOSE_FILE = docker-compose.yml
PROJECT = my_project
help: ## Show the available commands.
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "33[36m%-30s33[0m %sn", $$1, $$2}' $(MAKEFILE_LIST)
build: ## Build docker images
docker-compose -p $(PROJECT) -f $(COMPOSE_FILE) build --parallel --pull
rebuild: ## Force rebuild of docker images from scratch
docker-compose -p $(PROJECT) -f $(COMPOSE_FILE) build --parallel --pull --no-cache
up: ## Build and start docker containers
docker-compose -p $(PROJECT) -f $(COMPOSE_FILE) up -d
start: ## Start docker containers
docker-compose -p $(PROJECT) -f $(COMPOSE_FILE) start
down: ## Remove docker containers
docker-compose -p $(PROJECT) -f $(COMPOSE_FILE) down
stop: ## Stop docker containers
docker-compose -p $(PROJECT) -f $(COMPOSE_FILE) stop
restart: stop up ## Restart docker containers

(我包含restart目标是为了演示Makefile目标触发其他目标)

现在,问题我所拥有的是,我必须对目标make build进行的每一次更改也需要在make rebuild中进行更改(它们本质上是相同的命令,减去--no-cache标志。)

问题是:是否有办法让rebuild调用现有的build目标+附加--no-cache?

所以它看起来像

build: ## Build docker images
docker-compose -p $(PROJECT) -f $(COMPOSE_FILE) build --parallel --pull
rebuild: ## Force rebuild of docker images from scratch
${build} --no-cache

你可以把命令放在一个变量中;大多数makefile文件大量使用变量,以便在一个地方更改内容:

DOCKER_COMPOSE = docker-compose
DOCKER_CMD = $(DOCKER_COMPOSE) -p $(PROJECT) -f $(COMPOSE_FILE)

然后在你所有的食谱中使用$(DOCKER_CMD)。然后:

DOCKER_BUILD = $(DOCKER_CMD) build --parallel --pull
build:
$(DOCKER_BUILD)
rebuild:
$(DOCKER_BUILD) --no-cache

或者,您可以使用特定于目标的变量这样做:

NO_CACHE =
DOCKER_BUILD = $(DOCKER_CMD) build --parallel --pull $(NO_CACHE)
build:
$(DOCKER_BUILD)
rebuild: build
rebuild: NO_CACHE = --no-cache

最新更新