我需要做这样的事情:
case `uname -m` in
i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;
esac
但我需要在 makefile 中为特定目标执行此操作。我还没有找到用正则表达式创建 if 条件的方法。
我试过这个:
ifeq ($(shell uname -m), i*86)
但它不起作用。甚至
ifeq ($(shell uname -m), i686)
不起作用。
使用 Makefile 内置条件(与Ωmega 的 Bash 解决方案相反)
ifeq ($(shell uname -m | egrep "i.86"),) # empty result from egrep
@echo "No match"
else
@echo "Match"
endif
请参阅此处使用此方法验证 Git 标记https://gist.github.com/jesugmz/a155b4a6686c4172048fabc6836c59e1。
你可以这样做。只需通过转义行尾来确保您的case语句“在一行上”:
uname -m | grep -E 'i.86' >/dev/null \
case $$? in \
0) echo Matches \
;; \
1) echo No match \
;; \
esac
另外,请注意,这$?实际上是$$?为了防止make在将其传递给解释器之前尝试对其进行扩展。
if uname -m | grep -Eq 'i.86'
then
echo 'Yesss!'
fi