Bash Makefiles:在if语句中作为条件进行正则表达式匹配的语法
我想在Makefile中添加一行代码,以检查安装的python版本是否为2.7.X,最好是2.7.9或更高版本。特别不是3.X 我对bash脚本和makefile有点陌生,但是makefile似乎使用了与普通bash或shell脚本不同的语法,所以我不能做我通常会做的事情。比如: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中的正则表达式相匹配的语法是
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(用于或
功能)。