ifeq условно и в Makefile - PullRequest
       24

ifeq условно и в Makefile

0 голосов
/ 30 апреля 2019

Попытка сделать условную компиляцию на Makefile. Если все три условия (или совпадения) выполнены, то продолжайте компиляцию определенного подкаталога, иначе сделайте что-нибудь еще.

MATCH1 := $(if $(strip $(VAR1)),$(patsubst 6000,,$(VAR1)),NO)
MATCH2 := $(if $(strip $(VAR2)),$(patsubst cp,,$(VAR2)),NO)
MATCH3 := $(if $(strip $(VAR3)),$(patsubst 100g,,$(VAR3)),NO)

ifneq ($(and $(MATCH1)[,$(MATCH2)[,$(MATCH3)]])).   <<< error here
do-something
else 
do-something-else
endif

Код выдает ошибку в вышеупомянутой строке, говоря «Makefile: 26: *** неверный синтаксис в условных выражениях.»

Что я делаю не так?

1 Ответ

0 голосов
/ 30 апреля 2019

Вы неправильно читаете пример синтаксиса. В большинстве технических руководств символы [и] окружают необязательные элементы: части, которые можно опустить. Они не предназначены для вставки непосредственно в текст.

Также вам нужно сравнить две вещи, здесь у вас есть только одна (функция $(and ...)).

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

Вы должны написать это как:

ifneq (,$(and $(MATCH1),$(MATCH2),$(MATCH3)))

обратите внимание на запятую в начале: вы сравниваете пустую строку с результатом функции $(and ..) (которая будет пустой, если любая из переменных $(MATCHx) пуста.

...