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"
cabal expects the module of the executable to be
Main. You should skip the module line or usemodule Main where.Ok here is the possible reason. The executable of a haskell program is not produced when the module is not
Mainwhen you actually compile the program. Themainfunction of theMainmodule is used when the executable is run. A possible workaround for ghc is-main-isflag. So you can have something like