我如何配置Cabal以构建两个可执行文件?

问题描述 投票:2回答:1

我正在尝试使用Cabal构建a Haskell project。我有一个文件src / Main.hs,其中包含模块Main和函数main。该文件运行我的应用程序的Web界面。我还有另一个文件src / CLI.hs,其中包含模块CLI和函数main。我可以用runhaskell CLI ...很好地运行它,但是我似乎无法使用cabal对其进行编译。

事实是,即使我指定CLI.hs作为主文件(main-is: CLI.hs),它仍然会使用来自src / Main.hs的main编译项目,从而为我提供Web应用程序而不是CLI 。

我希望能够编译两个可执行文件,一个是Web应用程序,另一个是CLI,分别在CLI.hs和Main.hs中将每个文件的入口指定为main,在Main.hs中将其指定为main。 。

这是我目前正在使用的.cabal文件的片段:

executable color-word-analyzer-cli
  main-is:           CLI.hs
  other-modules:     AnnotateColors
                   , CategorizeColor
                   , ColorMaps
                   , FindColors
                   , PlotColors
                   , Types
                   , Main
  build-depends:       base
                     , lucid
                     ...
                     , wai-middleware-static
  hs-source-dirs:      src/
  default-language:    Haskell2010

executable color-word-analyzer-web
  main-is:           Main.hs
  other-modules:     AnnotateColors
                   , CategorizeColor
                   , ColorMaps
                   , FindColors
                   , PlotColors
                   , Types
                   , CLI
  build-depends:     base
                   , lucid
                     ...
                   , wai-middleware-static
  hs-source-dirs:      src/
  default-language:    Haskell2010

抛出错误(以及其他错误):

Building executable 'color-word-analyzer-cli' for color-word-analyzer-0.1.0.0..
Warning: Enabling workaround for Main module 'Main' listed in 'other-modules'
illegally!

<no location info>: warning: [-Wmissing-home-modules]
    These modules are needed for compilation but not listed in your .cabal file's other-modules: 
        Main

这很有趣,因为Main中清楚地列出了other-modules

我正在使用Cabal 3.0.0.0版和ghc版本8.8.2。

haskell cabal
1个回答
1
投票

编译单元的完全显式形式为<package>:<catagory>:<ident>,在这种情况下,软件包是color-word-analyzer,类别是exe,ident是可执行文件。因此,您可以致电:

cabal build color-word-analyzer:exe:color-word-analyzer-cli color-word-analyzer:exe:color-word-analyzer-web

现在您实际上不需要指定所有这些内容。当可执行文件是唯一的时,它是可执行文件(而不是其他软件包或其他软件包名称本身的测试),而它来自颜色词分析器。因此,您可以致电:

 cabal build color-word-analyzer-cli color-word-analyzer-web

编辑:因为您的链接中没有-web节,所以我使用了自己的一个创建,其中不包含CLI模块。请注意,您的CLI文件为module Main,因此可以解释您看到的错误-您不能将模块Main作为库模块包含在内。

© www.soinside.com 2019 - 2024. All rights reserved.