从Makefile执行shell脚本的问题

Blu*_*lub 1 makefile gnu-make

Makefile文件:

$(shell ./test.sh)
Run Code Online (Sandbox Code Playgroud)

第一个实验:test.sh

echo "hi"
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Makefile:1: *** missing separator.  Stop.
Run Code Online (Sandbox Code Playgroud)

第二个实验:test.sh

echo("hi")
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

./test.sh: line 1: syntax error near unexpected token `"hi"' 
./test.sh: line 1: `echo("hi")'
Run Code Online (Sandbox Code Playgroud)

没有任何意义......看起来'Make'试图将其语法强加于shell脚本,但shell脚本也需要它自己.

Bet*_*eta 6

试试./test.sh.

在第一个实验中,结果是

hi
Run Code Online (Sandbox Code Playgroud)

当你运行时make,该行的$(shell ./test.sh)计算结果为hi,Make不知道如何解释.

在第二个实验中,

./test.sh: line 1: syntax error near unexpected token `"hi"'
./test.sh: line 1: `echo("hi")'
Run Code Online (Sandbox Code Playgroud)

您编写的shell脚本没有正确的shell语法,因此失败了.无论您是运行它还是Make运行它都会失败.

  • 不完全是,你可以使用$(警告$(shell ...)),警告保证产生空输出,然后你可以使用(假)分配AAA:= $(shell ...) - 这一切都取决于你的特别需要. (4认同)