2016-05-14 2 views
1

У меня есть расчет A.N, где каждый шаг зависит от предыдущего шага A.N-1 (кроме первого шага), а также другого результата последовательного вычисления, B.N. Я хотел бы выразить это отношение в замыкающий файле:make: неявное правило, (tail-) рекурсивно применяется?

A.001: calc.script B.001 
    $^ > [email protected] 

A.%: calc.script B.% A.(%-1) # (%-1) is pseudocode for idea 
    $^ > [email protected] 

я могу получить второе правило работать A.002, но это не будет работать для A.003. Подход, который я использовал для псевдокода части выше:

# ... A.001 rule 
define dec = $(shell echo $(1)-1|bc|xargs printf '%03d') # want 3 digit #s 
.SECONDEXPANSION: 
A.%: calc.script B.% A.$$(call dec,$$*) 
    $$^ > [email protected] 

Есть ли поддержка языка для такого подхода? Я смотрю, что у меня есть конструкция $(foreach ..., $(eval $(call ...))) для создания правил, но я бы предпочел рекурсивный подход.

ответ

1

От the manual:

"No single implicit rule can appear more than once in a chain." 

Это особенность, а не ошибка. Тип рекурсии, который вы хотите, возможен в Make, но Make на самом деле не подходит для него.

+0

Получил это - я искал это четкое заявление, так как видел в другом месте намеки на поведение, но не мог его найти. Спасибо. Я просто использую цикл для построения правил, так как у меня есть четко определенный конечный индекс. – Carl

Смежные вопросы