makefile: несколько автоматических переменных - PullRequest
0 голосов
/ 08 мая 2019

Предположим, у меня есть следующее:

$: make foo-bar

// makefile contents
.PHONY foo-

foo-%:
    echo $*

И я хотел бы увеличить гибкость:

# either: 

$: make foo-bar:foobar

# or: 

$: make foo-bar-foobar

// makefile contents, pseudocode

.PHONY foo- foo-?-?

foo-%:
    echo $*

foo-%1-%2:
    echo $*1 $*2

С предупреждением о том, что я видел большие автоматически генерируемые make-файлы, которые успешно реализованысложные интерфейсы, такие как:

make foo:bar:baz

В идеале, было бы возможно реализовать логическую нотацию:

make foo::bar:baz

# but I understand that this may be reaching.

Возможно ли что-нибудь из этого с помощью современного gnu make?Я не беспокоюсь о старых версиях.И преимущество заключается в краткости и чистоте, как стихи некоторые подробные обходные пути.

1 Ответ

1 голос
/ 08 мая 2019

Если у вас есть конечное число возможностей для каждого сегмента, один вариант, если вы делаете что-то вроде:

 targs := $(foreach v1,foo foo1 foo2,\
        $(foreach v2,bar bar1 bar2,\
          $(foreach v3,foobar1 foobar2 foobar3, \
            $(v1)-$(v2)-$(v3))))

$(targs) :
    @IFS=- read v1 v2 v3 <<< $@; \
    echo $$v1 $$v2 $$v3

в противном случае, если первый сегмент всегда foo-, вы можете сделать:

 foo-% :
       IFS=- read v1 v2 v3 <<< $@; \
       echo $$v1 $$v2 $$v3

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

...