使用$(shell ...)从makefile执行python

时间:2013-11-01 14:58:39

标签: python shell makefile

我希望能够使用$(shell ...)命令从makefile执行python。然而,技巧是我不想编写完整的python脚本。

这是我正在尝试做的事情:

VAR = $(shell python -c '''
import argparse
import sys
def main():
    print(r'Hello world')
if '__main__' == __name__:
    main()
''')

我尝试了不同的变体,但它不起作用。总有一些东西 - 缺少分隔符,不正确的缩进,未知的符号等。有没有人之前做过这样的事情?

感谢任何帮助。

2 个答案:

答案 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)”调用它。