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

时间:2013-04-30 14:40:44

标签: bash shell makefile global-variables

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

1 个答案:

答案 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)