make: использование целевых переменных в предварительных условиях - PullRequest
9 голосов
/ 16 февраля 2012

Я пытаюсь написать Makefile, в котором пререквизиты используют целевые переменные

version=

target1: override version=1
target1: package

target2: override version=2
target2: package

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

source: src/${version}.c

Когда я запускаю make, переменная версии находится в целевом пакете, а исходный код пуст.я делаю неправильно?

1 Ответ

8 голосов
/ 16 февраля 2012

Использование Вторичное расширение :

.SECONDEXPANSION:

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

source: src/$${version}.c

UPD.

Этот ответ неверен, предлагаемый код не будет работать из-за причин, объясненных в ответе на аналогичный вопрос.

TL; DR: Переменные, специфичные для цели, вступают в силу в зависимости от того, какая цель в данный момент строит [ 1 ]. Второе расширение, в свою очередь, происходит прямо в конце фазы чтения [ 2 ], прежде чем что-либо строить.

Спасибо @ koniiiik за указание.

...