【发布时间】:2013-06-03 14:25:48
【问题描述】:
我正在尝试从 makefile 编写规则文件(makefile),我使用了 echo 命令来执行此操作, 但是当我谈到 $ 的部分时,我无法弄清楚如何正确地做到这一点。
我试过了:
$(shell echo -e "#!/usr/bin/make -f \nPYTHON3=\"$(shell py3versions -vr)\"" >>text.txt
但我收到错误消息说:
py3versions: error parsing Python-Version attribute
我要写入规则文件的代码:
#!/usr/bin/make -f
PYTHON3=$(shell py3versions -vr)
%:
dh $@ python3 --buildsystem=python_distutils
override_dh_auto_build: $(PYTHON3:%=build-python%)
......
任何人都可以就我应该使用哪个命令来创建此类文件提出一些建议? 如果使用 echo 命令,输入 $ 的方法是什么?
更新我的情况:
我正在尝试构建一个 python debian 包。上面显示的规则文件是构建它的方法。 (当然在调用其他函数后,如
python setup.py sdist
和
py2dsc,
然后这个规则(它被称为规则而不是makefile)文件将被调用来构建debian包。
规则文件可以通过 py2dsc 命令自动生成,但我需要对其进行修改以使其适用于不同版本的 python(例如,python2.* 和 python3.*)。所以我想只为 python2.* 和 python3.* 从 makefile 编写规则文件(它将调用 python setup.py sdist 和 py2dsc 以及这个规则文件)。
现在我面临一个问题:如何将 shell 命令以它的方式写入规则文件。非常感谢!
【问题讨论】:
-
这里添加的信息没有多大帮助。您在上面显示的 makefile 不可能工作,所以这不能是“构建它的方式”。例如,先决条件
$(PYTHON3:%=build-python%)不起作用。它将扩展为值build-python$(shell py3versions -vr),正如我们所见,它将失败,因为-r选项需要一个参数。你实际上想在这里跑什么?对py3versions的成功调用会是什么样子? -
为了让我们俩都更容易:忘记py3versions命令(它是通过debuild命令而不是make调用的,当我使用debuild时,规则文件运行良好)。假设我们有一个 shell 命令 DATE=$(shell date) (而不是那个 PYTHON3=$(shell py3versions -vr)。我在定义部分尝试了 DATE=$(shell date),我从命令中的规则文件。但我真正想要的是只有 DATE=$(shell date) (不是执行的输出)可以完成吗?谢谢。
-
如果您要问的是如何显示静态字符串
$(shell date)而不是让运行函数$(shell date),这就是我在下面的回答中解释的:转义$,然后 make 不会扩展它:echo 'PYTHON3 = $$(shell date)' -
非常感谢。它有效!