2

我在 Windows 8.1 x64 下使用 Eclipse (Kepler Service Release 2) + EclipseFP (2.6.0) + Haskell Platform。在安装了一些 cabal 之后,EclipseFP 停止工作并向我展示:

程序 ghc 版本 >=6.4 是必需的,但找不到。

我有:

  1. 已卸载的 Haskell 平台
  2. 已删除 C:\Users\myuser\AppData\Roaming\cabal*
  3. 已删除 C:\Program Files (x86)\Haskell*
  4. 安装 Haskell 平台 2013.2
  5. 使用我的 Haskell 工作区运行 Eclipse
  6. 尝试构建我的项目
  7. 它给了我这个关于 ghc 的错误并且无法构建它。

EclipseFP 配置找到了所有 Haskell Helper 可执行文件。它已经找到了 Cabal 1.16.0.2 和 GHC 7.6.3。从命令行 GHC 和 cabal 被发现并且正在工作。“cabal build”也正在从命令行处理该项目。

这条消息几乎什么都没说!如果我能看到它正在搜索 GHC 的路径或者它从哪里获得这条路径......

编辑:来自 buildwrapper 的消息:

"C:\Users\home\AppData\Roaming\cabal\bin\buildwrapper.exe 同步 --force=false --tempfolder=.dist-buildwrapper --cabalpath=C:\Program Files (x86)\Haskell Platform\2013.2 .0.0\lib\extralibs\bin\cabal.exe --cabalfile=D:\Project\haskell2\SomeGL\SomeGL.cabal --cabalflags= --logcabal=true
配置因为 setup_config 不存在
"C:\Program Files (x86 )\Haskell Platform\2013.2.0.0\lib\extralibs\bin\cabal.exe" "configure" "--verbose=1" "--user" "--enable-tests" "--enable-benchmarks" "- -builddir=D:\Project\haskell2\SomeGL.dist-buildwrapper\dist" cabal.exe:程序 ghc 版本 >=6.4 是必需的,但找不到。"

从 cmd.exe 调用最后一行(作为普通的非管理员用户)一切正常:

"C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin\cabal.exe" "configure" "--verbose=1" "--user" "--enable-tests" "--enable-benchmarks" "--builddir=D:\Project\haskell2\SomeGL\.dist-buildwrapper\dist"

编辑:为了找到使用的潜在路径环境,我尝试在 Eclipse 中运行 GHCi 控制台并尝试:

import System.Environment
x <- getEnvironment
filter (\ (a,_) -> a == "Path") x

并得到了一些开头的东西:

[("路径","C:\Program Files (x86)\Haskell\bin;C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin;C:\Program Files (x86) \Haskell 平台\2013.2.0.0\bin;...")]

第一个文件夹无效,但 Haskell 平台有效且正常工作。我发现的另一件事。有一次我运行“Build All”命令,在 Eclipse 中使用 GHC 运行 Process,路径是:

运行可执行文件 C:\Program Files (x86)\Haskell Platform\2013.2.0.0\bin\ghc.exe

我去看了这个过程的详细信息,它是由当前运行 Eclipse 的同一用户运行的。路径是正确的,但我仍然得到错误:

程序 ghc 版本 >=6.4 是必需的,但找不到。

从命令行运行仍然可以正常工作。该程序有错误,但我只在命令行中看到它们。

有人可以帮助找到这个问题吗?

编辑:我发现了一些有趣的问题。运行“Build All”命令正在执行此命令:

C:\Users\myuser\AppData\Roaming\cabal\bin\buildwrapper.exe 同步 --force=false --tempfolder=.dist-buildwrapper --cabalpath=C:\Program Files (x86)\Haskell Platform\2013.2。 0.0\lib\extralibs\bin\cabal.exe --cabalfile=D:\haskell\SomeGL\SomeGL.cabal --cabalflags= --logcabal=true

从命令行运行会出错。问题是cabalpath 周围没有引号,因为它有空格。当我从命令行以这种方式运行它时,它可以工作:

C:\Users\myuser\AppData\Roaming\cabal\bin\buildwrapper.exe synchronize --force=false --tempfolder=.dist-buildwrapper --cabalpath="C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin\cabal.exe" --cabalfile=D:\haskell\SomeGL\SomeGL.cabal --cabalflags= --logcabal=true

我认为所有“--cabalfile”参数都应该有引号,因为路径中可能有空格。我仍然不知道这是否是 Eclipse 下的问题。

4

2 回答 2

1

我发现了问题!

是 EclipseFP 2.6.0 使用大写的“PATH”变量,但我的 Windows 8.1 使用“Path”并且以某种方式在执行 BuildWrapper 和 Cabal 时可能有有效的两个变量“PATH”和“Path”。所以有些事情搞砸了。

此问题的解决方法是如果您从控制面板重命名 | 系统 | 用户和系统的环境变量从“路径”到“路径”。

我希望这可以在 EclipseFP 中修复,以便在任何情况下它都可以在未来工作。

于 2014-06-22T15:41:10.430 回答
0

构建您的项目意味着在幕后启动 cabal build。如果您在 Haskell 帮助程序可执行首选项页面中激活调试模式(显示 BuildWrapper 响应),您应该会看到正在发送的确切 cabal 构建命令。可能是 Eclipse 中使用的路径与命令行中使用的路径不同,请检查 Eclipse 快捷方式。EclipseFP 可以找到可执行文件,因为它还在 Windows 上一些众所周知的文件夹中进行搜索。您还可以从 github 获取 EclipseFP 的当前开发版本。它现在应该将 --with-ghc 传递给 cabal 调用,以确保在 Eclipse 中检测到的路径是使用的路径。

于 2014-06-18T09:59:55.903 回答