我在Windows 8.1 x64下使用Eclipse(Kepler Service Release 2)+ EclipseFP(2.6.0)+ Haskell Platform。 在安装了一些cabal之后的一刻,EclipseFP停止工作并向我展示:
程序ghc版本> = 6.4是必需的但无法找到。
我有:
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 synchronize --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-benchmarkmarks“” - 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
并得到一些开头的东西:
[(“Path”,“C:\ Program Files(x86)\ Haskell \ bin; C:\ Program Files (x86)\ Haskell Platform \ 2013.2.0.0 \ lib \ extralibs \ bin; C:\ Program 文件(x86)\ Haskell Platform \ 2013.2.0.0 \ bin; ...“)]
第一个文件夹无效,但Haskell平台有效且有效。 我找到的另一件事。有一次,我运行了“Build All”命令,在Eclipse中使用GHC运行Process,路径为:
运行可执行文件C:\ Program Files(x86)\ Haskell 平台\ 2013.2.0.0 \ BIN \ ghc.exe
我去看了这个进程的详细信息,它是从当前运行Eclipse的同一个用户运行的。路径是正确的,但我仍然得到错误:
程序ghc版本&gt; = 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下的问题。
答案 0 :(得分:1)
我发现了问题!
EclipseFP 2.6.0使用大写的“PATH”变量,但是我的Windows 8.1使用“Path”并以编程方式在执行BuildWrapper时有可能有两个变量“PATH”和“Path”。阴谋。所以有些东西搞乱了。
此问题的解决方法是从控制面板重命名系统|用户和系统的环境变量,从“路径”到“路径”。
我希望这可以在EclipseFP中修复,以便将来可以在任何情况下工作。
答案 1 :(得分:0)
构建项目意味着在幕后启动cabal构建。如果在Haskell帮助程序可执行首选项页面中显示调试模式(显示BuildWrapper响应),您应该会看到发送的确切cabal构建命令。可能是Eclipse中使用的路径与命令行中使用的路径不同,请检查eclipse快捷方式。 EclipseFP可以找到可执行文件,因为它也可以在Windows上的一些众所周知的文件夹中搜索。 您还可以从github获取EclipseFP的当前开发版本。它现在应该将--with-ghc传递给cabal调用,以确保在Eclipse中检测到的路径是使用的路径。