我需要有条件地执行一些make规则,只要安装的Python大于某个版本(比如2.5) .
我以为我可以做一些像执行:
python -c 'import sys; print int(sys.version_info >= (2,5))'
然后在 ifeq
make语句中使用输出('1',如果确定,否则为'0') .
在一个简单的bash shell脚本中,它只是:
MY_VAR=`python -c 'import sys; print int(sys.version_info >= (2,5))'`
但这在Makefile中不起作用 .
有什么建议?我可以使用任何其他合理的解决方法来实现这一目标 .
4 回答
在
MY_VAR=$(shell echo whatever)
中使用Makeshell
builtin将作业包装在
eval
中对我有用 .我正在写一个答案,以提高解决问题的实际语法的可见性 . 不幸的是,对于那些寻找合理问题的简单答案的人来说,有些人可能认为琐碎的事情会成为一个非常重要的问题 .
将以下内容放入文件“Makefile”中 .
您希望看到的行为如下(假设您最近安装了python) .
如果您将上述文本复制并粘贴到Makefile中,您会得到这个吗?可能不是 . 您可能会收到类似于此处报告的错误:
makefile:4: *** missing separator. Stop
原因:因为虽然我个人使用了真正的标签,但Stack Overflow(试图提供帮助)会将我的标签转换为多个空格 . 你,沮丧的互联网公民,现在复制这个,认为你现在拥有我使用的相同文本 . make命令现在读取空格并发现“all”命令格式不正确 . 因此,复制上面的文本,粘贴它,然后将“@echo”之前的空白转换为选项卡,这个例子最终应该为你工作 .
这里有一个更复杂的例子,配方内有管道和变量赋值: