Force exit from a Makefile target without raising

2020-08-09 06:39发布

问题:

I work with a Makefile generated by an external tool (Netbeans), where I can not change the logic of the main target, but I am able to "inject" logic in a target that is executed before the actual build (.build-pre to be specific in Netbeans-generated Makefile)

I would like for that target to conditionally terminate the make execution, but without raising an error. If I do

exit

inside the "pre" rule, nothing happens (I mean, the rule terminates, but make continues). If I add

exit 1

make will terminate, but it will return an error status.

Is there a way to force make to exit in a clean way? I searched for make functions, but found only error/warn/info, but nothing like exit.

Thanks in advance!

EDIT: Based on comments it does not seem possible. Pity.

For completeness, a more specific example of what I'd like to achieve:

default: pre
  @echo "Doing default"

pre: 
  @echo "Doing pre"
ifeq "$(SOME_VARIABLE)" "yes"
  exit 0
fi

With Makefile like above, I'd like to be able for pre to execute, and conditionally prevent 'default' from executing, but still return 0 to the shell.

回答1:

You can have the all target do nothing if a variable is not set:

ifeq ($(SOME_VAR),)
$(info SOME_VAR not set!)
all:
else
all: target1 target2 targetetc
endif


回答2:

Just expanding a bit on @Ken's excellent response. You can also do this:

ifeq ("test", "test")
postinstall:
    @echo "test = test"
else
postinstall:
    @echo "test != test"
endif