Question

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.

Était-ce utile?

La solution

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top