很有可能从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。
答案 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))