问题
With the following project structure:
src/FirstExecutable.hs
src/SecondExecutable.hs
my-amazing-project.cabal
and the following cabal setup:
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.*
Running cabal install
fails with the following output:
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
What am I doing wrong or is this a Cabal bug?
The contents of the executable modules are as follows:
module FirstExecutable where
main = putStrLn "Running FirstExecutable"
and
module SecondExecutable where
main = putStrLn "Running SecondExecutable"
回答1:
cabal expects the module of the executable to be Main
. You should skip the module line or use module Main where
.
Ok here is the possible reason. The executable of a haskell program is not produced when the module is not Main
when you actually compile the program. The main
function of the Main
module is used when the executable is run. A possible workaround for ghc is -main-is
flag. So you can have something like
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.*
来源:https://stackoverflow.com/questions/14238729/producing-multiple-executables-from-single-project