22

具有以下项目结构:

src/FirstExecutable.hs
src/SecondExecutable.hs
my-amazing-project.cabal

和以下阴谋集团设置:

name:               my-amazing-project
version:            0.1.0.0
build-type:         Simple
cabal-version:      >=1.8

executable first-executable
  hs-source-dirs:   src
  main-is:          FirstExecutable.hs
  ghc-options:      -O2 -threaded -with-rtsopts=-N
  build-depends:    base == 4.5.*

executable second-executable
  hs-source-dirs:   src
  main-is:          SecondExecutable.hs
  ghc-options:      -O2 -threaded -with-rtsopts=-N
  build-depends:    base == 4.5.*

运行cabal install失败,输出如下:

Installing executable(s) in
/Users/mojojojo/Library/Haskell/ghc-7.4.2/lib/my-amazing-project-0.1.0.0/bin
cabal: dist/build/second-executable/second-executable: does not exist
Failed to install my-amazing-project-0.1.0.0
cabal: Error: some packages failed to install:
my-amazing-project-0.1.0.0 failed during the final install step. The exception
was:
ExitFailure 1

我在做什么错还是这是阴谋集团的错误?


可执行模块的内容如下:

module FirstExecutable where

main = putStrLn "Running FirstExecutable"

module SecondExecutable where

main = putStrLn "Running SecondExecutable"
4

1 回答 1

28

cabal 期望可执行文件的模块是Main. 您应该跳过模块行或使用module Main where.

好的,这是可能的原因。Main当您实际编译程序时没有生成模块时,不会生成 haskell 程序的可执行文件。运行可执行文件时使用模块的main功能。Main一个可能的 ghc 解决方法是-main-isflag。所以你可以有类似的东西

name:               my-amazing-project
version:            0.1.0.0
build-type:         Simple
cabal-version:      >=1.8

executable first-executable
  hs-source-dirs:   src
  main-is:          FirstExecutable.hs
  ghc-options:      -O2 -threaded -with-rtsopts=-N -main-is FirstExecutable
  build-depends:    base == 4.5.*

executable second-executable
  hs-source-dirs:   src
  main-is:          SecondExecutable.hs
  ghc-options:      -O2 -threaded -with-rtsopts=-N -main-is SecondExecutable
  build-depends:    base == 4.5.*
于 2013-01-09T16:00:46.807 回答