凿子安装错误

Chisel installation error

在遵循 the tutorial on the Chisel official website for installation 的过程中,我到了应该测试安装是否正确完成的地步。这样做会产生此错误:

set -e -o pipefail; "sbt" -Dsbt.log.noformat=true -DchiselVersion="2.+" "run Parity --genHarness --compile --test --backend c --vcd --targetDir /home/me/chisel-tutorial/generated/examples " | tee /home/me/chisel-tutorial/generated/examples/Parity.out
/bin/bash: sbt: command not found
make: *** [/home/me/chisel-tutorial/generated/examples/Parity.out] Error 127

关于同一个问题还有另一个问题,建议将SHELL=/bin/bash添加到Makefile。那对我不起作用。另一个建议是删除 set -e -o pipefail:这个建议确实有效,但是删除那个选项可以吗?它有什么作用?

Edit_1:

我已经安装了 sbt 并将其路径添加到 PATH 变量中。

$ which sbt
/usr/bin/sbt

但是当 运行 make Parity.out

时我仍然收到这个错误
set -e -o  pipefail; "sbt" -Dsbt.log.noformat=true -DchiselVersion="2.+" "run Parity --genHarness --compile --test --backend c --vcd --targetDir /home/me/chisel-tutorial/generated/examples " | tee /home/me/chisel-tutorial/generated/examples/Parity.out
/bin/sh: 1: set: Illegal option -o pipefail
make: *** [/home/me/chisel-tutorial/generated/examples/Parity.out] Error 2

如果我编辑文件的这一部分suffix.mk:

$(objdir)/%.dot: %.scala
            set -e  -o pipefail; "$(SBT)" $(SBT_FLAGS) "run $(notdir $(basename $<)) --backend dot --targetDir $(objdir) $(CHISEL_FLAGS)"

$(objdir)/%.out: %.scala
            set -e -o  pipefail; "$(SBT)" $(SBT_FLAGS) "run $(notdir $(basename $<)) --genHarness --compile --test --backend c --vcd --targetDir $(objdir) $(CHISEL_FLAGS)" | tee $@

通过删除 set -e -o pipefail 中的 -o 选项它起作用了,我在 运行 $ make Parity.out 之后收到了 PASSED 和 [success] 消息。那么这是怎么回事?

Edit_2:

在我将 SHELL=/bin/bash 添加到 Makefile 后,它现在工作正常,所以首先是没有 sbt 的问题,正如 Nathaniel 指出的那样,然后编辑 Makefile 以包含 SHELL=/bin/bash

set -e -o pipefail 是一种确保 bash 脚本的执行都按预期工作的方法,如果出现故障,它会立即停止(而不是在稍后的某个阶段) .删除它可能有效 - 但如果出现故障,它可能会被吞噬并隐藏它已损坏的事实。

但我认为你的问题出在这里,使另一个问题有点转移注意力:

/bin/bash: sbt: command not found

您的系统上安装了 sbt 吗? 运行 which sbt 作为执行脚本的用户。例如,在我的系统上:

$ which sbt
/opt/local/bin/sbt

如果您的系统上没有它,运行 which 不会返回任何内容。

脚本显然需要访问 sbt 并且在找不到它时失败。如果您的系统上确实有它,那么用户 运行 脚本和对该文件的访问之间存在不匹配。您需要 post 有关您如何执行脚本的更多信息:在这种情况下,您可能必须更新 PATH 变量才能找到 sbt 可执行文件。

鉴于在修复此问题后,您仍然遇到问题,您必须确保您在 bash 中是 运行,而不是其他终端类型。原因是 bash 支持 set -o pipefail 但很多其他终端不支持。我们怀疑可能是这种情况,因为错误消息:

/bin/sh: 1: set: Illegal option -o pipefail

这里我们看到/bin/sh(shell)正在被程序调用。使用 ls -l /bin/sh 确定您的 /bin/sh 是否指向特定的 shell。如果它没有指向 bash shell,那么你要么需要重新指向它(小心!这本身可能是另一个问题),要么需要指定你的 Scala 程序来使用具体 shell。