你如何根据目标变量(Makefile)有条件地调用目标?

时间:2013-09-30 22:52:09

标签: makefile conditional target

我希望根据是否在makefile上运行make devmake prod来运行不同版本的clean目标。

我本身并没有编译任何东西,只是想根据变量有条件地调用特定目标或一组目标,例如:

ifeq ($(BUILD_ENV),"development")
clean: -clean
else
clean: -clean-info
endif

#---------------------------------
dev: BUILD_ENV = development
dev: dev-setup which-env

#---------------------------------
prod: BUILD_ENV = production
prod: prod-setup which-env

#---------------------------------


which-env: clean
    @echo -e "$(GREEN)$(BUILD_ENV)!$(CLEAR)"

-clean: -clean-info -clean-logs | silent
    @echo -e "$(GREEN)</CLEAN>$(CLEAR)"

-clean-info:
    @echo -e "$(GREEN)<CLEAN>...$(CLEAR)"

-clean-logs:
    @echo -e " $(GREY)Removing log and status files $(CLEAR)";
    @if [ -d .stat ]; then rm -rf .stat; fi
    @rm -f *.log || true

有没有办法用Makefiles做到这一点?我还没有找到任何可以说明这个用例的内容。

我不是要特意清理任何东西或构建任何东西,这只是我试图有条件地调用一组目标的一个例子。实际目标可能是其他任何目标。

1 个答案:

答案 0 :(得分:6)

你要求的确实是你想要的东西并不是很清楚,但是这里有:

all:

ifeq ($(BUILD_ENV),development)
all: clean-dev
else
all: clean-other
endif

clean-dev:
    @echo running $@, doing something

clean-other:
    @echo running $@, doing something else

如果你运行make BUILD_ENV=development,你会得到一些东西;如果您运行makemake BUILD_ENV=production,您将获得其他内容。