Makefile将变量传递给bash脚本

时间:2018-03-02 02:51:09

标签: bash makefile

我想将一个以空格分隔的引用子串字符串从Makefile传递给make目标(实际上是几个不同的make目标)。目标只执行一个bash脚本,然后将每个引用的子字符串作为位置参数传递给另一个脚本。

测试Makefile

FOO="foo bar"
FOO+="bar baz"
FOO+="baz qux"
FOO+="qux"
export FOO

t:
    ./script.sh

此处script.sh

#! /bin/bash
set -ex

./thing.sh "$FOO"

这不起作用;输出(注意周围的单引号)是:

 ~/c/scrap
(i) make t
./script.sh
+ ./thing.sh '"foo bar" "bar baz" "baz qux" "qux"'

要清楚,我想要的是将许多参数传递给thing.sh而不是单个参数,我需要引用每个参数,因为它可能有空格或特殊字符。

 ~/c/scrap
(i) make t
./script.sh
+ ./thing.sh "foo bar" "bar baz" "baz qux" "qux"

实现这一目标的最佳方法是什么?理想情况下,我们会在Makefile中解决此问题,以避免在每个使用FOO的目标中重复解决方案。

1 个答案:

答案 0 :(得分:0)

这是解决Makefile级别问题的一种方法:

FOO="foo bar"
FOO+="bar baz"
FOO+="baz qux"
FOO+="qux"
export FOO

t:
    eval './script.sh $(FOO)'

这是script.sh

#! /bin/bash
set -ex

./thing.sh "$@"

这是thing.sh

#! /bin/bash
echo "$1"
echo "$2"
echo "$3"
echo "$4"

输出:

 ~/c/scrap
(i) make t
eval './script.sh "foo bar" "bar baz" "baz qux" "qux"'
+ ./thing.sh 'foo bar' 'bar baz' 'baz qux' qux
foo bar
bar baz
baz qux
qux