我运行makefile为目标设备生成一个映像文件。在我将图像刻录到目标设备中之后,在其中一个操作函数function1 .sh调用script.sh,其中声明了我的VAR。
我想在运行Makefile期间生成目标图像访问脚本。sh知道路径,读取VAR的值并在Makefile中使用它。
的例子:
script.sh:
…
VAR = some_value
…
=====现在我需要什么脚本Makefile ?===============
我试过这个方法但没有工作 --------------------------
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)
您必须导出变量以使其在子进程中可见。
从Makefile导出变量到bash脚本:
export variable := Stop
all:
/path/to/script.sh
或使用shell样式导出:
all:
variable=Stop /path/to/script.sh
从shell导出变量:
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
...
Makefile:
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"
Makefile:
# start script and fetch the value
VAR := $(shell ./script.sh | sed -n '/^result: /s/^.*: //p')
all:
@echo VAR=$(VAR)