【发布时间】:2020-05-18 17:20:47
【问题描述】:
我正在努力让这条规则发挥作用。它完全炸毁了我的整个 Makefile。
它应该验证用户传递的version 的值是否存在于PYVERSION 变量中。
实际行为是复杂的,因为我尝试了很多不同的东西。我不是 GNU 专家,所以我尝试了 ${version} 和 $(version) 和 $version 以及 PYVERSION 的相同操作。我在此处发布的当前版本总是进入 else 块,与 version 输入无关。
PYVERSIONS := "3.5 3.6 3.7 3.8"
.PHONY: venv
venv:
if test $(findstring ${version}, $(PYVERSIONS)); then
/Library/Frameworks/Python.framework/Versions/${version}/bin/python3 -m venv venv
else
$(error Bad python version given (${version}) project only supports ${PYVERSIONS})
fi;
像
make venv version=3.5一样调用它应该会成功执行if块并创建venv。像
make venv version=2.7这样调用它应该会在 else 块中引发错误消息。
我试图关注这个post
更新
在@Beta 的帮助下,这是我要工作的最终解决方案。
PYVERSIONS := "3.6 3.7 3.8"
PYPATH := /Library/Frameworks/Python.framework/Versions
.PHONY: venv
venv:
@if test $(findstring ${version}, $(PYVERSIONS)) ; \
then \
echo "Creating virtual environment for python ${version}"; \
$(PYPATH)/${version}/bin/python3 -m venv venv; \
else \
echo "Unsupported python version (${version}). Project supports $(PYVERSIONS)"; \
fi
【问题讨论】:
-
您的问题应该严格保持为一个问题。如果您想发布自己的答案,欢迎您这样做。