1

makefile を実行して、ターゲット デバイス用のイメージ ファイルを生成します。操作の 1 つ中にイメージをターゲット デバイスに焼き付けた後、funtion1.sh は VAR が宣言されている script.sh を呼び出します。

Makefile の実行中に、パスを知っているターゲット イメージ アクセス script.sh を生成し、VAR の値を読み取って Makefile で使用するようにしたい。

例:

script.sh:

...

VAR=何らかの値

...

===== 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

You must export the variable to make it visible in subprocess.

exporting variable from Makefile to bash script:

export variable := Stop

all:
    /path/to/script.sh

or export it using shell style:

all:
    variable=Stop /path/to/script.sh

exporting variable from shell to make:

export variable=Stop
make -C path/to/dir/with/makefile

or:

variable=Stop make -C path/to/dir/with/makefile

or:

make -C path/to/dir/with/makefile variable=Stop

If you need to read variable from script you can find it's declaration and extract the value like that:

script.sh:

...
VAR=some_value
...

Makefile:

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

all:
    @echo VAR=$(VAR)

But, think this is not a very good method.


Better is to output results of execution in the script and fetch it in Makefile.

Example:

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)
于 2013-04-30T14:55:02.000 に答える