1

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

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

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

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

任何帮助表示赞赏。

4

2 回答 2

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 方向/指令/等。跨越多行。在 python 脚本上下文中的问题是 python 有严格的换行/缩进/空白规则,不能很好地使用它。

make 没有该限制的唯一上下文是在定义块中。

于 2013-11-01T15:22:43.597 回答
0

您可以简单地将“#!/usr/bin/env python3”添加到脚本的顶部。然后通过运行“chmod +x nameofscript”使其可执行,然后在您的 bash 脚本中使用“$(shell ./nameofscript)”调用它。

于 2013-11-01T15:16:27.383 回答