sed
またはを使用できない場合はgrep
、次のような構文解析後にmakefileデータベースを読み取る必要があります。
make -pn -f test.mk > /tmp/make.db.txt 2>/dev/null
while read var assign value; do
if [[ ${var} = 'test_var' ]] && [[ ${assign} = ':=' ]]; then
test_var="$value"
break
fi
done </tmp/make.db.txt
rm -f /tmp/make.db.txt
これにより、次のようになります。
value := 12345
test_var := ${value}
12345
の代わりにを出力します${value}
makefileからすべての変数を表す変数を作成する場合は、内部のifを次のように変更できます。
if [[ ${assign} = ':=' ]]; then
# any variables containing . are replaced with _
eval ${var//./_}=\"$value\"
fi
test_var
したがって、適切な値に設定されたような変数を取得します。で始まるmake変数がいくつかあります。これは、search-replaceが実行している.
ようなシェル変数の安全な値に置き換える必要があります。_