使用正则表达式Makefile'if'条件

时间:2012-07-04 11:43:46

标签: regex makefile

我需要做这样的事情:

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)

不起作用。

3 个答案:

答案 0 :(得分:1)

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

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

另请注意,$?实际上是$$?,以防止make在将其传递给解释器之前尝试展开它。

答案 1 :(得分:1)

使用Makefile内置条件(与Ωmega's Bash solution相反)

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

答案 2 :(得分:-2)

if uname -m | grep -Eq 'i.86'
then
  echo 'Yesss!'
fi