LINUX.ORG.RU

Правило в Makefile

 makefile bash


0

1

В Makefile есть несколько подобных правил - rule_0, rule_1, rule_2:

rule_0:
   cp file_0 rule_0_path/
   mv file_1 rule_0_path/
   touch rule_0_path/file_2

rule_1:
   cp file_0 rule_1_path/
   mv file_1 rule_1_path/
   touch rule_1_path/file_2

rule_2:
   cp file_0 rule_2_path/
   mv file_1 rule_2_path/
   touch rule_2_path/file_2

Как видно, отличаются они незначительно. Есть ли возможность избавиться от копипаста?

Хочется что-то подобное такому:

base_rule:
   cp file_0 $(arg)_path/
   mv file_1 $(arg)_path/
   touch $(arg)_path/file_2

rule_0:
   base_rule(rule_0)

rule_1:
   base_rule(rule_1)

rule_2:
   base_rule(rule_2)
★★★★★

Думаю, так должно работать:

rule_0 rule_1 rule_2:
   cp file_0 $@_path/
   mv file_1 $@_path/
   touch $@_path/file_2

Хотя есть и другие варианты с более сложным синтаксисом.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Думаю, так должно работать:

Супер, спасибо.

А как быть с зависимостями?

.rule_0_dep
   # private rule 0 actions

rule_0: .rule_0_dep
   cp file_0 rule_0_path/
   mv file_1 rule_0_path/
   touch rule_0_path/file_2

.rule_1_dep
   # private rule 1 actions

rule_1: .rule_1_dep
   cp file_0 rule_1_path/
   mv file_1 rule_1_path/
   touch rule_1_path/file_2

.rule_2_dep
   # private rule 2 actions

rule_2: .rule_2_dep
   cp file_0 rule_2_path/
   mv file_1 rule_2_path/
   touch rule_2_path/file_2
andreyu ★★★★★
() автор топика
Ответ на: комментарий от xaizek

Просто выписать их отдельно:

И rule_{0,1,2}_dep реализовать так же, как и rule_{0,1,2}. Спасибо, отличный вариант.

andreyu ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.