Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从makefile编写makefile的最佳方法是什么_Python_Linux_Makefile - Fatal编程技术网

Python 从makefile编写makefile的最佳方法是什么

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 我要写入规则文件的代码:

我试图从一个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 

然后调用这个规则(称为规则而不是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'