Python 从makefile编写makefile的最佳方法是什么
我试图从一个makefile中编写一个规则文件(makefile),我使用了echo命令, 但是,当我谈到美元的部分时,我不知道如何正确地完成它 我试过:Python 从makefile编写makefile的最佳方法是什么,python,linux,makefile,Python,Linux,Makefile,我试图从一个makefile中编写一个规则文件(makefile),我使用了echo命令, 但是,当我谈到美元的部分时,我不知道如何正确地完成它 我试过: $(shell echo -e "#!/usr/bin/make -f \nPYTHON3=\"$(shell py3versions -vr)\"" >>text.txt 但我收到的错误信息是: py3versions: error parsing Python-Version attribute 我要写入规则文件的代码:
$(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
及
然后调用这个规则(称为规则而不是makefile)文件来构建debian包
规则文件可以由py2dsc命令自动生成,但我需要修改它以使其适用于不同版本的python(例如,python2.*和python3.*)。因此我认为只需从makefile(将调用python setup.py sdist和py2dsc以及此规则文件)为python2.*和python3.*编写规则文件即可
现在我面临的问题是:如何将shell命令以规则文件的方式写入。非常感谢!使用两个美元符号($$
)从make中转义美元符号:
all:
@echo 'VAR = $$VAR'
顺便说一句,我认为你不应该为此使用$(shell…
。你没有给出一个完整的makefile示例,但是如果你的echo
命令是配方的一部分,就直接编写它,不要使用$(shell…
)
另请注意:
echo-e
不可移植,不能在所有POSIX系统上运行。我建议您改用printf
,它可以做同样的事情,而且是可移植的。非常感谢。是的,这样我可以获得我的大部分内容。但是当涉及到PYTHON3=$(shell py3versions-vr),我仍然收到一条错误消息说py3versions:解析Python版本属性时出错。有什么想法吗?谢谢。当您遇到类似问题时,首先要尝试从shell提示符运行它。如果您不能在那里运行它,那么当您从make运行它时,它显然不起作用。当我这样做时:$py3versions-vr
我明白了同样的错误。查看帮助(py3versions--help)
我可以看到-r
选项期望得到一个参数:[-r|--request |]
所以我会尝试给它一个。非常感谢您提供的提示。是的,py3versions需要另一个文件名或X-python-version属性值。在我的例子中,我想按原样将行PYTHON3=$(shell py3versions-vr)写入另一个文件(规则),而不是执行它。该行将从规则文件执行(我在这里设置了X-python-version属性)。请指出我是否误解了这里的任何内容。非常感谢。$(shell…
命令运行您给它的命令,它不会编写您给它的命令。这就是为什么您会看到此错误:当您使用变量$(PYTHON3)时
make运行命令py3versions-vr
,但由于该错误而失败。基本上,您在问题中显示的生成的makefile似乎不正确,我无法告诉您真正想要做什么。如果您用文字描述了您想要做什么以及为什么需要生成makefile?请使用此inf编辑问题格式:很长的注释序列很难管理。此处添加的信息没有多大帮助。上面显示的makefile无法工作,因此这不可能是“构建它的方式”。例如,先决条件$(PYTHON3:%=build python%)
无法工作。它将扩展到值build python$(shell py3versions-vr)
,正如我们所看到的,它将失败,因为-r
选项需要一个参数。您实际上要在这里运行什么?成功调用py3versions
会是什么样子?为了让我们双方都更容易:忘记py3versions命令(它是通过debuild命令而不是make调用的,当我使用debuild时,规则文件运行良好)。假设我们有一个shell命令DATE=$(shell DATE)(而不是PYTHON3=$(shell py3versions-vr)。我在define部分尝试了DATE=$(shell DATE),我从规则文件中的命令获得了输出日期。但我真正想要的是只有DATE=$(shell日期)(不是执行的输出)可以吗?谢谢。如果你问的是如何显示静态字符串$(shell日期)
,而不是让make运行函数$(shell日期)
,这就是我在下面的回答中解释的:转义$
,那么make不会扩展它:echo'PYTHON3=$(shell日期)“
非常感谢。它很有效!
all:
@echo 'VAR = $$VAR'