gpt4 book ai didi

makefile - ONESHELL Makefile中的if语句不起作用

转载 作者:行者123 更新时间:2023-12-05 00:18:19 26 4
gpt4 key购买 nike

我收到 /bin/sh: -c: line 1: syntax error: unexpected end of file对于下面 makefile 中的 if 语句 - 有什么问题? (我的提示是 /tmp > 。)

/tmp > make test
set -e
if [[ -f /tmp/device ]] ; then
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [test] Error 2
/tmp > cat Makefile
.ONESHELL:
test:
set -e
if [[ -f /tmp/device ]] ; then
echo 'Do something'
fi

我正在使用 GNU Make 3.81。

最佳答案

使用 GNU Make 3.81, .ONESHELL 功能显然不受支持——你展示了那个,我展示了那个。我在 Mac OS X 10.11.5 上测试,使用提供的 /usr/bin/make作为 GNU Make 3.81。我通过添加战略位置 echo PID=$$$$ 来证明我很满意前几行 set -e ,之后,依此类推,并观察到不同的 PID 值。 GNU Make 3.81 版是 2006 年的(2010 年也有 3.82 版,在 4.x 版发布之前,从 2013 年的 4.0 开始)。

GNU Make 的当前版本是 4.2.1(2016 年 6 月)。该版本确实支持该功能;当使用足够新的 GNU Make 版本时,您的脚本按预期工作。这是一项已经存在了一段时间的功能 - 您可能不必升级到最新版本即可获得支持,但是如果您无论如何要升级,为什么还要使用向下版本。

如果您想使用 .ONSHELL:功能,您必须确保您使用的是足够新的 GNU Make 版本(比版本 3.81 新)。如果这不可行,请不要使用该功能。

从4.2.1读取NEWS文件,很明显ONESHELL已添加到 GNU Make 3.82 版:

Version 3.82 (28 Jul 2010)



* New special target: .ONESHELL instructs make to invoke a single instance
of the shell and provide it with the entire recipe, regardless of how many
lines it contains. As a special feature to allow more straightforward
conversion of makefiles to use .ONESHELL, any recipe line control
characters ('@', '+', or '-') will be removed from the second and
subsequent recipe lines. This happens _only_ if the SHELL value is deemed
to be a standard POSIX-style shell. If not, then no interior line control
characters are removed (as they may be part of the scripting language used
with the alternate SHELL).

关于makefile - ONESHELL Makefile中的if语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com