我正在尝试使用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。
编译单元的完全显式形式为<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
作为库模块包含在内。