Изменить для новой версии вопроса (" работает как с make BSD, так и с GNU make "):
Оператор назначения оболочки !=
, очевидно, поддерживается наBSD и GNU make:
platform_id != uname -s
platform != if [ $(platform_id) = Linux ] || \
[ $(platform_id) = FreeBSD ] || \
[ $(platform_id) = OpenBSD ] || \
[ $(platform_id) = NetBSD ]; then \
echo $(platform_id); \
else \
echo Unrecognized; \
fi
Обратите внимание, что назначения действительно оцениваются оболочкой: именно результат этой оценки присваивается переменным make, а не командам оболочки.
Вот решение, которое требует GNU make.Он работает с GNU make на BSD, но не с BSD make.
Одна возможность - использовать if
GNU make функцию :
platform := $(if $(patsubst Linux,,$(shell uname -s)),BSD or other,Linux)
Еще однаполагаться только на условные выражения оболочки:
platform := $(shell [ $$(uname) = Linux ] && echo Linux || echo BSD or other)
Можно также использовать условные выражения GNU :
ifeq ($(shell uname -s),Linux)
platform := Linux
else
platform := BSD or other
endif