[英]Chisel installation error
在遵循Chisel官方网站上的教程进行安装时 ,我到了要测试安装是否正确的地步。 这样做会产生此错误:
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
:该建议实际上有效,但是可以删除该选项吗? 它有什么作用?
编辑_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]消息。 那么发生了什么?
编辑_2:
在我将SHELL=/bin/bash
到Makefile之后,它现在工作正常,所以首先是一个没有sbt的问题,如Nathaniel指出的,然后编辑Makefile以包含SHELL=/bin/bash
。
set -e -o pipefail
是一种确保bash脚本的执行都能按预期工作并且如果出现故障则立即停止(而不是在以后的某个阶段)的一种方式。 删除它可能会起作用-但如果出现故障,它可能会被吞下并掩盖它已损坏的事实。
但是我认为您的问题就在这里,这使另一个问题有点像鲱鱼了:
/ bin / bash:sbt:找不到命令
您的系统上安装了sbt
吗? 以执行脚本的用户身份运行which sbt
。 例如,在我的系统上:
$ which sbt
/opt/local/bin/sbt
如果您的系统上没有它,则运行which
不会返回任何which
。
该脚本显然需要访问sbt
并且在找不到该脚本时会失败。 如果您的系统上确实有此文件,则运行脚本的用户与对该文件的访问之间将不匹配。 您需要发布有关如何执行脚本的更多信息:在这种情况下,您可能必须更新PATH
变量才能找到sbt
可执行文件。
鉴于此,在解决此问题之后,您仍然遇到问题,必须确保您正在bash
运行,而不是其他终端类型。 原因是bash
支持set -o pipefail
但许多其他终端不支持。 我们怀疑可能是由于错误消息造成的:
/ bin / sh:1:设置:非法选项-o pipefail
在这里,我们看到程序正在调用/bin/sh
(shell)。 使用ls -l /bin/sh
确定您的/bin/sh
是否指向特定的shell。 如果它没有指向bash
shell,那么您要么需要重新指向它(小心!这本身就是另一个问题),要么需要指定Scala程序以使用特定的shell。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.