在 cabal 文件的库或可执行部分中构建依赖项?
Build dependency in library or executable section of cabal file?
首先,我是 Haskell 使用 cabal 和外部包的新手。
我正在尝试使用 MyLib 中的 Graphics.Gloss 包。如果我在 library
和 executable
的 build-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
依赖项中时,为什么这不起作用?
你可以让它发挥作用。您当前的设置存在问题,即库文件和可执行文件位于同一目录中。另请参阅此问题 How to avoid recompiling in this cabal file?,这是同一潜在问题的症状:当您构建可执行文件时,它会从头开始重建 MyLib
(这需要 gloss 依赖项),而不是重新使用已经构建的库.
MyLib/
ray-tracer.cabal
MyLib.hs
Main.hs # Bad
将 .hs
文件移动到单独的目录中(技术上你只需要移动其中一个,但我认为最好保持根目录尽可能统一):
MyLib/
MyLib.cabal
src/
MyLib.hs
exe/
Main.hs
并在 cabal 文件中,将 hs-source-dirs: src
和 hs-source-dirs: exe
添加到相应的部分:
library
hs-source-dirs: src
...
executable ray-tracer
hs-source-dirs: exe
...
首先,我是 Haskell 使用 cabal 和外部包的新手。
我正在尝试使用 MyLib 中的 Graphics.Gloss 包。如果我在 library
和 executable
的 build-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
依赖项中时,为什么这不起作用?
你可以让它发挥作用。您当前的设置存在问题,即库文件和可执行文件位于同一目录中。另请参阅此问题 How to avoid recompiling in this cabal file?,这是同一潜在问题的症状:当您构建可执行文件时,它会从头开始重建 MyLib
(这需要 gloss 依赖项),而不是重新使用已经构建的库.
MyLib/
ray-tracer.cabal
MyLib.hs
Main.hs # Bad
将 .hs
文件移动到单独的目录中(技术上你只需要移动其中一个,但我认为最好保持根目录尽可能统一):
MyLib/
MyLib.cabal
src/
MyLib.hs
exe/
Main.hs
并在 cabal 文件中,将 hs-source-dirs: src
和 hs-source-dirs: exe
添加到相应的部分:
library
hs-source-dirs: src
...
executable ray-tracer
hs-source-dirs: exe
...