我运行makefile为目标设备生成图像文件。在我操作funtion1.sh之一的过程中将图像刻录到目标设备后,调用我的VAR声明的script.sh.
我想在运行Makefile时生成目标图像访问script.sh知道路径,读取VAR的值并在Makefile中使用它。
示例:
script.sh:
...
VAR = SOME_VALUE
...
=====现在Makefile需要什么脚本?===============
- 我试过这个方法,但它不起作用--------------------------
生成文件:
PLAT_SCRIPT := /path/to/script.sh
PLAT_VAR := VAR
PLAT_SCRIPT_TEXT := $(shell grep ${PLAT_VAR} ${PLAT_SCRIPT}) VAR := $(filter-out ${PLAT_VAR}, $(strip $(subst =, , $(subst ",, $(strip ${PLAT_SCRIPT_TEXT})))))
all:
@echo VAR=$(VAR)
由于某种原因它不起作用。也许我应该用第4行替换:
VAR := $(shell echo $(PLAT_SCRIPT_TEXT)|cut -d, -f1|awk -F'=' '{print $2 }' )
all:
@echo VAR=$(VAR)
答案 0 :(得分:2)
您必须导出变量以使其在子流程中可见。
将变量从Makefile导出到bash脚本:
export variable := Stop
all:
/path/to/script.sh
或使用shell样式导出它:
all:
variable=Stop /path/to/script.sh
将shell中的变量导出到make:
export variable=Stop
make -C path/to/dir/with/makefile
或:
variable=Stop make -C path/to/dir/with/makefile
或:
make -C path/to/dir/with/makefile variable=Stop
如果你需要从脚本中读取变量,你可以找到它的声明并提取如下的值:
script.sh:
...
VAR=some_value
...
生成文件:
VAR := $(shell sed -n '/VAR=/s/^.*=//p' script1.sh)
all:
@echo VAR=$(VAR)
但是,请认为这不是一个非常好的方法。
最好是在脚本中输出执行结果并在Makefile中获取它。
示例:
script.sh:
#!/bin/bash
VAR=some_value
# some work here
echo "some useful output here"
# outputting result with the variable to use it in Makefile
echo "result: $VAR"
生成文件:
# start script and fetch the value
VAR := $(shell ./script.sh | sed -n '/^result: /s/^.*: //p')
all:
@echo VAR=$(VAR)