Makefile: если строка заканчивается другой строкой - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь иметь правило, что если VAR заканчивается ENDS_WITH, то X, иначе Y.Теперь я смог своего рода добиться этого с помощью следующего:

VAR := Hello, World

ENDS_WITH := rld

endswith:
ifeq ($(findstring $(ENDS_WITH)potato,$(VAR)potato),)
    @echo "$(VAR) doesn't end with $(ENDS_WITH)"
    # Do X
else
    @echo "$(VAR) ends with $(ENDS_WITH)"
    # Do Y
endif

Однако это предполагает, что ни одна из строк не содержит potato, иначе это будет иметь странное поведение.(Кроме того, это своего рода хак)

Каков будет правильный путь для достижения этой цели?

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете использовать это:

$(patsubst %$(ENDS_WITH),,$(lastword $(VAR)))

Это расширится до пустой строки, если VAR заканчивается значением переменной ENDS_WITH, иначе непустая строка.Мы должны использовать lastword здесь, потому что patsubst работает с каждым словом индивидуально, но мы заботимся только о последнем.

Итак:

endswith:
ifeq ($(patsubst %$(ENDS_WITH),,$(lastword $(VAR))),)
        @echo "$(VAR) ends with $(ENDS_WITH)"
        # Do Y
else
        @echo "$(VAR) doesn't end with $(ENDS_WITH)"
        # Do X
endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...