读取Makefile中script.sh声明的变量值



我运行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)

相关内容

  • 没有找到相关文章

最新更新