!=
BSD 和 GNU make 显然都支持 shell 赋值运算符:
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
请注意,分配实际上是由 shell 评估的:它是分配给 make 变量的评估结果,而不是 shell 命令。
需要 GNU make 的解决方案。它适用于 BSD 上的 GNU make,但不适用于 BSD make。
一种可能性是使用if
GNU make 函数:
platform := $(if $(patsubst Linux,,$(shell uname -s)),BSD or other,Linux)
另一种是仅依赖于 shell 条件:
platform := $(shell [ $$(uname) = Linux ] && echo Linux || echo BSD or other)
也可以使用GNU make 条件:
ifeq ($(shell uname -s),Linux)
platform := Linux
else
platform := BSD or other
endif