make: Using target specific variables in prerequis

2019-01-18 13:28发布

问题:

I'm trying to write a Makefile where prerequisites using target specific variables

version=

target1: override version=1
target1: package

target2: override version=2
target2: package

package: dir=package-${version}\
package: source

source: src/${version}.c

When i run make the version variable is in target package and source empty.

What I'm doing wrong?

回答1:

Use Secondary Expansion:

.SECONDEXPANSION:

package: dir=package-$${version}
package: source

source: src/$${version}.c

UPD.

This answer is wrong, the suggested code won't work because of the reasons explained in the answer to a similar question.

TL;DR: Target-specific variables take their effect based on the target that make is currently building [1]. Second expansion, in turn, takes place right at the end of the read-in phase [2], before building anything.

Thanks to @koniiiik for pointing out.