1

我运行 makefile 为目标设备生成图像文件。在我在其中一个操作 funtion1.sh 调用 script.sh 期间将图像刻录到目标设备后,我的 VAR 被声明了。

我希望在运行 Makefile 期间生成目标图像访问 script.sh 知道路径,读取 VAR 的值并在 Makefile 中使用它。

例子:

脚本.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)
4

1 回答 1

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

如果您需要从脚本中读取变量,您可以找到它的声明并像这样提取值:

脚本.sh:

...
VAR=some_value
...

生成文件:

VAR := $(shell sed -n '/VAR=/s/^.*=//p' script1.sh)

all:
    @echo VAR=$(VAR)

但是,认为这不是一个很好的方法。


更好的是在脚本中输出执行结果并在 Makefile 中获取。

例子:

脚本.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)
于 2013-04-30T14:55:02.000 回答