John Sullivan
John Sullivan

Reputation: 1311

GNU Make expand pattern within shell command

I have a situation where I need a small program to determine the prerequisites of a file by examining it. Concretely:

%.bar: $(shell python get_preqs.py %.foo) # % in shell is not substituted
    python gen_bar.py $^ $@ 

This doesn't work however, as the % in the shell command doesn't get substituted in by make. Is there any way to achieve this?

Upvotes: 0

Views: 137

Answers (2)

user5484700
user5484700

Reputation: 46

Another option is to use a build tool more suited to dynamic targets. For example, I've written a Gnu Make-like tool incorporating some of the concepts from DJB's ReDo, called GoodMake. Your equivalent makefile would just be:

#? *.bar
    preqs=$(python get_preqs.py ${1%.bar}.foo)
    $0 $preqs
    python gen_bar.py $preqs $1

Upvotes: 0

MadScientist
MadScientist

Reputation: 100956

You can use the .SECONDEXPANSION feature of GNU make:

.SECONDEXPANSION:
%.bar: $$(shell python get_prereqs.py $$*.foo)
        python gen_bar.py $^ $@

Upvotes: 1

Related Questions