Вы смешиваете синтаксис оболочки с синтаксисом Make.
Если вы хотите обработать это условным условием shell , вы должны поместить все это в одну строку в рецепте (так как каждый строка выполняется в своей собственной подоболочке):
venv:
if test $(findstring ${version}, $(PYVERSIONS)) ; then echo $(version)/bin/python3 venv; else echo bad version $(version); fi
или вы можете обернуть строку с помощью обратной косой черты:
venv:
if test $(findstring ${version}, $(PYVERSIONS)) ; \
then \
echo $(version)/bin/python3 venv; \
else \
echo bad version $(version); \
fi
(Обратите внимание, что перед * стоит только одна TAB 1011 *.)
Если вы хотите использовать Сделать условным в правиле:
venv:
ifeq ($(findstring ${version}, $(PYVERSIONS)),)
echo bad version $(version);
else
echo echo $(version)/bin/python3 venv;
endif
Если вы хотите использовать команду Maker error
, вы иметь проблему. Make выполнит оценку условия перед выполнением любого правила, поэтому, если вы используете error
, то, если действительный номер версии не задан, Make выдаст ошибку , даже если venv
не было целью. Это Можно использовать error
, но это больно, поэтому вы должны сначала решить, стоит ли эффект цена.