凿子安装错误
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。
在遵循 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。