2

我想在我的 makefile 中确定 Intel Fortran 编译器的版本,所以我添加了一些使用GNU shell函数的脚本,如下所示,

VERIFORT := $(shell ifort --version)
#VERIFORT := $(shell ifort --version | grep ^ifort) # error occurred too

.PHONY: test
test:
    echo $(VERIFORT)

如果您复制上面显示的那些代码行,请确保echo命令前有一个选项卡。

这给了我一些错误

/bin/sh: -c: line 0: syntax error near unexpected token `('

当我运行命令ifort --versionifort --version | grep ^ifort在终端中时,它给出了正确的结果并且没有发生错误。

我的系统:64 位 CentOS 7

感谢任何更正建议。

[编辑]

添加更多输出细节:

对于 的grep版本VERIFORT,该make命令产生以下结果,

echo ifort (IFORT) 18.0.2 20180210
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo ifort (IFORT) 18.0.2 20180210'
make: *** [test] Error 1

[解决了]

事实证明这是@MadScientist 提到的一个使用echo问题

我认为您需要在VERIFORT打印时引用变量的值,以便 shell 不会解释特殊字符。

引用VERIFORT变量产生以下结果(grep版本)

echo 'ifort (IFORT) 18.0.2 20180210'
ifort (IFORT) 18.0.2 20180210

并且没有发生错误。

我还通过echo在终端中使用对其进行了测试

echo ifort (IFORT) 18.0.2 20180210

哪个产生了同样的错误

bash: syntax error near unexpected token `('
4

1 回答 1

4

看来您没有显示make命令的完整输出。我认为在此错误消息之前,make打印了echo一行(除非您向我们展示的 makefile 实际上不是您调用的内容,并且您的实际 makefile@在 echo 之前添加了一个...在这种情况下,您应该在调试时将其删除)。如果您向我们展示了该输出是什么,那么问题出在哪里会更清楚。ifort --version当你从命令行运行它时,你也没有显示命令的输出是什么,但我认为它可能包含括号。

我认为您需要在VERIFORT打印时引用变量的值,以便 shell 不会解释任何特殊字符:

test:
        echo '$(VERIFORT)'
于 2018-04-18T04:26:58.917 回答