我想将一个以空格分隔的引用子串字符串从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
的目标中重复解决方案。
答案 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