Underhill
Underhill

Reputation: 442

For loop variable is empty in gmake

I have a list of header files created thus:

expand=$(1)/$(1).h
HDRS=$(foreach x, $(DIRS), $(call expand,$(x)))

Which yields a list like a/a.h b/b.h ...

but when I use this in a for loop:

for i in $(HDRS) ; do \
    echo $$i \
    cp $$i $(some_dir) \
done

$$i is empty. And the cp fails, having only one argument.

The usual variants of $$i ( $i, $$i, $(i), ${i} ), don't change anything, nor do the usual variants of $(HDRS) ("$(HDRS)", etc.).

gmake echos the for-loop as

for i in a.h b.h ; \
do \
    echo $i \
    cp $i somedir \
done

Which looks correct.

But the implicit bash shell emits an error "/bin/sh -c: line 5: syntax error: unexpected end of file"

gmake then exits due to the failed command.

Upvotes: 0

Views: 216

Answers (1)

Florian Weimer
Florian Weimer

Reputation: 33717

Due to the \, make emits the recipe as a single line. This confuses the shell. Try this instead, using ; in place of the line terminator:

for i in a.h b.h ; \
do \
    echo $i ; \
    cp $i somedir ; \
done

Upvotes: 1

Related Questions