【问题标题】:Build dependency in library or executable section of cabal file?在 cabal 文件的库或可执行部分中建立依赖关系?
【发布时间】:2020-06-09 15:55:17
【问题描述】:

首先,我不熟悉在 Haskell 中使用 cabal 和外部包。

我正在尝试使用 MyLib 中的 Graphics.Gloss 包。如果我在libraryexecutablebuild-depends 中都包含gloss,我可以让它工作。

这是 cabal 文件的相关部分:

library
  exposed-modules:     MyLib
  build-depends:       base ^>=4.13.0.0,
                       gloss ^>=1.13.1.1
  default-language:    Haskell2010

executable ray-tracer
  main-is:             Main.hs
  other-modules:       MyLib
  build-depends:       base ^>=4.13.0.0, ray-tracer,
                       haskell-say ^>=1.0.0.0,
                       gloss ^>=1.13.1.1

MyLib.hs

module MyLib (someFunc) where
import Graphics.Gloss

someFunc :: IO ()
someFunc = display (InWindow "My Window" (200,200) (10,10)) white (Circle 80)

Main.hs

module Main where

import qualified MyLib (someFunc)
import HaskellSay (haskellSay)

main :: IO ()
main = do
  MyLib.someFunc

gloss 仅包含在library 依赖项中时,为什么这不起作用?

【问题讨论】:

    标签: haskell cabal


    【解决方案1】:

    你可以让它工作。您当前的设置存在问题,即库文件和可执行文件位于同一目录中。另请参阅此问题How to avoid recompiling in this cabal file?,这是同一潜在问题的症状:当您构建可执行文件时,它会从头开始重建MyLib(这需要光泽依赖),而不是重用已经构建的库。

    MyLib/
      ray-tracer.cabal
      MyLib.hs
      Main.hs       # Bad
    

    .hs文件移动到单独的目录中(技术上你只需要移动其中一个,但我认为最好保持根目录尽可能统一):

    MyLib/
      MyLib.cabal
      src/
        MyLib.hs
      exe/
        Main.hs
    

    并在cabal文件中,将hs-source-dirs: srchs-source-dirs: exe添加到相应的部分:

    library
      hs-source-dirs: src
      ...
    
    executable ray-tracer
      hs-source-dirs: exe
      ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      相关资源
      最近更新 更多