Change a target within Makefile?
Masahiro Yamada <[email protected]> Wed, 24 Jul 2024 18:44:37 +0900
| Newsgroups | gmane.comp.gnu.make.general |
|---|---|
| Message-ID | <CAK7LNATrJtxY8FZR1FVJts7JdxL9iLxqJ+cxk85voEWtEcrboQ@mail.gmail.com> |
Hi.
My question is very similar to this:
https://stackoverflow.com/questions/31443920/remove-target-from-makecmdgoals
When a particular flag is set, I want to do something extra.
I know this is hard, but please forgive me to repeat a similar question
in case somebody in the list may know something.
The following Makefile illustrates what I'd like to do.
Of course, it does not work since MAKECMDGOALS is read-only.
----------->8-------------
ifdef GENERATE_B_AS_WELL
# When this flag is set, we want to generate %.b as well.
# I know I cannot update MAKECMDGOALS...
MAKECMDGOALS := $(patsubst %.a, %.b, $(MAKECMDGOALS))
endif
%.a:
touch
%.b: %.a
cp $< $@
----------->8-------------
Then, I hope the following would happen.
$ make x.a
-> create x.a
$ make x.a GENERATE_B_AS_WELL=1
-> create x.b as well as x.a
If recursion is allowed, the following might work, but
I'd hope to find something simpler in a single invocation of Make.
-------------------->8----------------
ifdef GENERATE_B_AS_WELL
%a:
$(MAKE) $(patsubst %.a,%.b,$@) GENERATE_B_AS_WELL=
else
%.a:
touch
%.b: %.a
cp $< $@
endif
-------------------->8----------------
--
Best Regards
Masahiro Yamada