help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to get the current make target


From: Yakov Lerner
Subject: Re: How to get the current make target
Date: Thu, 11 Sep 2003 10:59:48 +0200
User-agent: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.0.1) Gecko/20020920 Netscape/7.0

Yanghui Bian wrote:
Generally I could get the make target from "makecmdgoals" provided by
GNU make.
But sometimes people will invoke make like below:
make target1 target2 target3
... is there any way to get the target which is under
processing?

I wrote earlier about one solution.

Here's another workaround/solution:

(1) Rename your 'Makefile' into 'Makefile.1"

(2) As a "Makefile", use included generic 'stub'
which 'translates' 0,1, or n targets of 'make' command
into equivalent sequence of calls to Makefile.1 with exactly
one target in the $(MAKECMDGOALS) on each invocation of Makefile.1

(3) Customize the 'DEFAULT_TARGET = all' line in the 'stub' Makefile

(4) add this comment to the Makefile.1

  # this 'Makefile.1' is called via special 'stub' Makefile
  # which ensures that $(MAKECMDGOALS) contains exactly 1 target

Now inside Makefile.1, $(MAKECMDOALS) will always contain
single word, the current toplevel target.

Jacob Lerner

------------------- begin 'stub' Makefile
# Turn 0,1, or more targets on command-line into
# equivalent series of calls to Makefile.real, each call with
# exactly one target on command line of Makefile.real

# define DEFAULT_TARGET as first target defined in Makefile.1
DEFAULT_TARGET = all

ifeq (,$(MAKECMDGOALS))

# zero targets on command line
$(DEFAULT_TARGET):
        $(MAKE) -f Makefile.1 $(DEFAULT_TARGET)
else

# 1 or more targets on command line
%:
        for goal in $(MAKECMDGOALS); do   \
                $(MAKE) -f Makefile.1 $$goal || exit 1; \
        done
endif
---------------- end 'stub' Makefile
# Turn 0,1, or more targets on command-line into 
# equivalent series of calls to Makefile.real, each call with
# exactly one target on command line of Makefile.real

# define DEFAULT_TARGET as first target defined in Makefile.1
DEFAULT_TARGET = all

ifeq (,$(MAKECMDGOALS))

# zero targets on command line
$(DEFAULT_TARGET):
        $(MAKE) -f Makefile.1 $(DEFAULT_TARGET)
else

# 1 or more targets on command line
%:
        for goal in $(MAKECMDGOALS); do   \
                $(MAKE) -f Makefile.1 $$goal || exit 1; \
        done
endif


reply via email to

[Prev in Thread] Current Thread [Next in Thread]