从makefile运行python脚本,并将python脚本的输出返回到makefile中的变量

时间:2019-06-30 11:11:41

标签: makefile gnu-make

很有可能从makefile中目标内嵌的规则运行python脚本(以便对mkaefile组件的输出进行后处理)。但是可以将python脚本中的某些值返回给makefile并将其分配给makefile中的一些变量。

所以我认为可以通过两种方式完成: 流程1: 1.从makefile调用python脚本 2.允许python脚本将输出存储在某些已知文件中 3.从makefile中读取值,并将其分配给其中的变量

我已经尝试过这种方法,并且能够执行步骤1和步骤2,但是无法执行步骤3。

过程2: 1.从makefile调用python脚本 2.让python脚本返回一些值,该值将分配给makefile中的变量

我无法尝试,因为找不到任何示例

----------------- makefile----------------
help:  detect_term_type

file := term_type
TERM_TYPE := $(cat ${file})

detect_term_type:
    python configure_things.py



-------configure_things.py-----
import platform

class TerminalType:

    def __init__(self):
        self.find_terminal_name()

    def find_terminal_name(self):
        f= open("term_type","w+")
        f.write(platform.system())
        f.write('\n')
        f.close()

我希望将python脚本(“ Linux”或“ Cygwin”)的输出分配给makefile变量TERM_TYPE。

2 个答案:

答案 0 :(得分:0)

  

很有可能从嵌入的规则中运行python脚本   在makefile中的目标内部(以便对输出进行后期处理   mkaefile组件)。但是是否有可能从   python脚本返回到makefile并将其分配给内部的一些变量   生成文件。

make的POSIX规范未定义可用于此目的的任何功能。但是,如果您碰巧专门依赖GNU make,则它具有$(shell)函数,可以实现以下目的:

TERM_TYPE := $(shell python figure_it_out.py)

在任何情况下,您都无法通过构建文件然后将其读回来执行此操作,因为变量在构建任何东西之前都会先获取其值。

答案 1 :(得分:-1)

在makefile规则中使用以下内容将值重新分配给变量。在这种情况下,TERM_TYPE将使用存储在文件“ term_type”(python存储输出的文件名)中的值进行重新分配。

run_python: 
    @python configure_things.py 

detect_term_type:run_python
    $(info xyz)
    $(eval TERM_TYPE=$(shell cat term_type|head -1))
    $(info $(TERM_TYPE))