如何与nix一起使用堆栈来构建wxHaskell项目?

问题描述:

我正在尝试使用Nix和Stack为wxHaskell设置构建环境。如何与nix一起使用堆栈来构建wxHaskell项目?

我已经通过nix安装了wxWidgets-3.0.2。这是由.cabal文件

executable hellowx-exe 
hs-source-dirs:  app 
main-is:   Main.hs 
ghc-options:  -threaded -rtsopts -with-rtsopts=-N 
build-depends:  base 
        , hellowx 
        , wx 
        , wxc 
        , wxcore 
        , wxdirect 

相关部分和stack.yaml文件

resolver: lts-5.0 
extra-deps: 
- wx-0.92.2.0 
- wxc-0.92.2.0 
- wxcore-0.92.2.0 
- wxdirect-0.92.2.0 

加入

nix: 
    enable: true 
    packages: [wxwidgets] 

我试过,但,这不是明显的正确途径。

因此,我摆脱了.yaml文件中的nix部分,并尝试导致失败的命令$ stack --nix build。日志文件说

[1 of 1] Compiling Main    (/run/user/1000/stack8847/wxc-0.92.2.0/Setup.hs, /run/user/1000/stack8847/wxc-0.92.2.0/.stack-work/dist/x86_64-linux-nix/Cabal-1.22.5.0/setup/Main.o) 
Linking /run/user/1000/stack8847/wxc-0.92.2.0/.stack-work/dist/x86_64-linux-nix/Cabal-1.22.5.0/setup/setup ... 
Error: wx-config not found, please install wx-config before installing wxc 

但是我确实有通过nix安装的wx-config和wxwidgets。构建过程出于某种原因无法找到它。我能做些什么来设置这个构建环境?有没有办法指示构建过程来查看包含wx-config的目录?我无法弄清楚它为什么找不到它。它在PATH中。

好吧,我想通了。我添加了错误的“属性名称”。这是正确的stack.yaml文件

# at this point in time nix supports lts-5.0 
resolver: lts-5.0 

packages: 
-'.' 

extra-deps: 
- wx-0.92.2.0 
- wxc-0.92.2.0 
- wxcore-0.92.2.0 
- wxdirect-0.92.2.0 

# wxwidgets-3.0.2 has the attribute name wxGTK30 
# you also need zlib, mesa_noglu and x11 

nix: 
    enable: true 
    packages: [zlib, wxGTK30, mesa_noglu, x11] 

这似乎正确地构建一切,我能够在这里建立一个最小的窗口(minimal.hs

+0

为什么你不使用shell.nix? – CMCDragonkai