0
我正在使用Makefiles进行Python项目。我需要在每个Makefile中包含一些Python配置变量,并且Makefiles可以驻留在项目根目录下的各个子目录中(尽管深度不超过一层)。包含用于执行包含的Makefile的路径
在项目的根,我创建了一个Makefile.inc用,例如,以下内容:
define PYSCRIPT
from lib.custommodule import VAR1
print(VAR1)
endef
VAR1 := $(shell python -c '$(PYSCRIPT)')
'custommodule的生活该项目的Python的lib目录内的根,和所有的Makefile文件在包含Makefile.inc的顶层,执行没有错误。
在 '子目录/ Makefile文件',我有:
include ../Makefile.inc
echo $(VAR1)
当我cd subdirectory && make
,我收到错误:
ImportError: No module named custommodule
我试图在“Makefile.inc前面加上Python路径'(在define PYSCRIPT
块中)包含父目录,认为'子目录/ Makefile'在它自己的路径中对其父路径执行'../Makefile.inc',但这也不起作用。
我是否错过了防止这种情况发生的东西?还是有更好的方法来实现我想要的?
这不会起作用:您正试图将一个make变量赋值添加到python脚本中。 – MadScientist
不完全。我添加到由$'(shell ...)'调用python变量赋值执行的python脚本中。 make扩展将在将脚本传递给python之前进行。如果您有明确的证据表明它无法正常工作,请解释原因。 –
当然,'$(ROOTDIR)'将在python被调用之前展开。但是_assignment_将被python解释,而不是make,因为你将整个脚本传递给'python -c'。你只是将名为'PYTHONPATH'的Python变量设置为'.'或'..',这是Python中的语法错误,无论如何不会做你想要的。你可以这样做:'(shell PYTHONPATH = $(ROOTDIR)python -c'$(PYSCRIPT)')'(并将其从脚本中取出)。要获得明确的证据,只需运行'python -c'PYTHONPATH =。''然后看它失败... – MadScientist