Bash Makefiles:在if语句中作为条件进行正则表达式匹配的语法

Bash Makefiles:在if语句中作为条件进行正则表达式匹配的语法,bash,makefile,Bash,Makefile,我想在Makefile中添加一行代码,以检查安装的python版本是否为2.7.X,最好是2.7.9或更高版本。特别不是3.X 我对bash脚本和makefile有点陌生,但是makefile似乎使用了与普通bash或shell脚本不同的语法,所以我不能做我通常会做的事情。比如: if [[ $(python --version) =~ "Python 2.7.*" ]]; then echo "Version matched!"; fi 将字符串与Makefile中的正则表达式相匹配的语法是

我想在Makefile中添加一行代码,以检查安装的python版本是否为2.7.X,最好是2.7.9或更高版本。特别不是3.X

我对bash脚本和makefile有点陌生,但是makefile似乎使用了与普通bash或shell脚本不同的语法,所以我不能做我通常会做的事情。比如:

if [[ $(python --version) =~ "Python 2.7.*" ]]; then echo "Version matched!"; fi
将字符串与Makefile中的正则表达式相匹配的语法是什么

我找到了用于替换的Makefile模式和
ifeq
ifneq
,但它们似乎无法完成我希望它们完成的任务

感谢您的帮助。谢谢

像这样试试:

ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`
if [ $ret -eq 0 ]; then
    echo "Python 2.7.x required"
else 
    echo "Python version is < 3.x"
fi
$(or $(findstring Python 2.7.,$(shell python --version 2>&1)),$(error Python 2.7.x is required))

ret=`python-c'导入sys;print(“%i”%”(sys.hexversion如果您想在任何特定规则之外编写此测试,则必须使用make语法。假设您使用的是GNU make,则可以编写如下内容:

ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`
if [ $ret -eq 0 ]; then
    echo "Python 2.7.x required"
else 
    echo "Python version is < 3.x"
fi
$(or $(findstring Python 2.7.,$(shell python --version 2>&1)),$(error Python 2.7.x is required))
(奇怪的是,
python--version
将其版本打印到stderr而不是stdout)


有关这些函数的更多详细信息,请参见。

您的示例在Bash中也不起作用-不要引用正则表达式使其起作用。请参见。另请参见在纯GNUmake语法中具有glob matcher的函数。如果python-c'import sys;exit(sys.hexversion<0x03000000),可以将其简化为
“;然后…
我的makefile正在抱怨我缺少了一个分隔符:**缺少分隔符。Stop.chepner,感谢您的贡献!工作正常!wp78de感谢您的帮助!
python--version 2>&1 | grep'python 2'
比这堆东西要紧凑得多。我在将字符串解释为文件路径时遇到了问题:Pyt。”无法打开文件“2.7”。:[Errno 2]没有这样的文件或目录您可能没有正确地转录它,这是正确的语法。我的示例应该出现在任何配方之外,因为makefile语法不是shell语法。例如,在定义任何目标之前,makefile中的第一件事,而不是变量的一部分。只有它自己的一行,完全如图所示。解决方案wp78de shows是shell语法,应该出现在配方中的某个地方。它还需要至少GNU make版本3.81(用于
功能)。