8

我需要做这样的事情:

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)

不起作用。

4

3 回答 3

6

使用 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

于 2019-03-05T15:32:01.047 回答
-1

你可以这样做。只需通过转义行尾来确保您的case语句“在一行上”:

uname -m | grep -E 'i.86' >/dev/null \
case $$? in \
   0) echo Matches \
   ;; \
   1) echo No match \
   ;; \
esac

另外,请注意,这$?实际上是$$?为了防止make在将其传递给解释器之前尝试对其进行扩展。

于 2012-07-04T11:47:15.120 回答
-6
if uname -m | grep -Eq 'i.86'
then
  echo 'Yesss!'
fi
于 2012-07-04T11:56:01.900 回答