我希望能够使用$(shell ...)命令从makefile执行python。然而,技巧是我不想编写完整的python脚本。
这是我正在尝试做的事情:
VAR = $(shell python -c '''
import argparse
import sys
def main():
print(r'Hello world')
if '__main__' == __name__:
main()
''')
我尝试了不同的变体,但它不起作用。总有一些东西 - 缺少分隔符,不正确的缩进,未知的符号等。有没有人之前做过这样的事情?
感谢任何帮助。
答案 0 :(得分:1)
你的报价错了。您正在跨越不喜欢交叉的语法行。 Python的重要空白规则使这个问题更加复杂化。这就是说以下解决方案适合您:
define PYSCRIPT
import sys
def main():
print(r"Hello world")
if "__main__" == __name__:
main()
endef
VAR =: $(shell python -c '$(PYSCRIPT)')
$(info VAR: $(VAR))
''' ... '''
在shell级别上不是一个有意义的引用机制。 shell将其视为空字符串,后跟开头引号。这是python长字符串语法。
make需要行连续标记来理解make direction / directives / etc.跨越多行。 python脚本上下文中的问题是python有严格的换行符/缩进/空白规则,但这些规则不能很好地发挥作用。
make没有限制的唯一上下文是在一个定义块中。
答案 1 :(得分:0)
您只需将“#!/ usr / bin / env python3”添加到脚本的顶部即可。然后通过运行“chmod + x nameofscript”使其可执行,然后在你的bash脚本中使用“$(shell ./nameofscript)”调用它。