Как могла бы функция make работать внутри цикла Bash, работающего в makefile? - PullRequest
1 голос
/ 04 ноября 2019

Как могла бы функция make работать внутри цикла Bash, пытаясь:

Part=hey high huh
Str=hey do not be high huh
entity:
    @for n in $(Part) ;{ \
      echo $(subst $$n,,$(Str)); \
    }

удалить определенные строки .. не работает, как ее решить?

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Это решение внутри make:

Part=hey high huh
Str=hey do not be high huh
entity:
    $(foreach p,$(Part),echo $(filter-out $(p),$(Str));)

Обратите внимание на ; перед закрытием ), которое служит для разделения команд echo, поскольку они будут выполняться в одной строке оболочки,Если команды оболочки становятся более сложными, чем простой echo, вам, возможно, будет лучше использовать полноценный консервированный рецепт .

0 голосов
/ 04 ноября 2019

Ваша for выполняется оболочкой, а $(subst ...) является функцией make, поэтому будет выполнена до того, как оболочка получит возможность зацикливаться. Вы должны получить эквивалентную функцию в оболочке. Например

Part=hey high huh
Str=hey do not be high huh
entity:
        @for n in $(Part) ; do \
            echo $$(echo $(Str) | sed "s/$$n//") ; \
        done
...