繁体   English   中英

凿子安装错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM