Вопрос

I want a different version of the clean target to run based on whether make dev or make prod are run on a makefile.

I'm not compiling anything per se, just want to conditionally call a particular target or set of targets based on a variable, for example:

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

Is there a way to do this with Makefiles? I havent found anything yet that illustrates this use-case.

I'm not trying to specifically clean anything or build anything this is just an example of me trying to conditionally call a set of targets. The actual targets could be anything else.

Это было полезно?

Решение

It's not at all clear that what you're asking for is really what you want, but here goes:

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

If you run make BUILD_ENV=development, you'll get something; if you run make or make BUILD_ENV=production you'll get something else.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top