Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cabal Multiple Executables

Tags:

haskell

cabal

I'm working on a website using Yesod I have the normal build running but I can't seem to populate my database reliably. I have a second haskell program that populates the database and I've added it to my cabal file like this:

executable         program
  if flag(library-only)
    Buildable: False

  main-is:           ../main.hs
  hs-source-dirs:    dist
  build-depends:     base
                   , myproject
                   , yesod-default

executable         init
  if flag(library-only)
    Buildable: False

  main-is:           init.hs
  hs-source-dirs:    Init
  build-depends:     base
                   , directory
                   , persistent
                   , persistent-sqlite
                   , text
                   , myproject
                   , yesod-default

The problem is that when I run 'cabal build' it does not rebuild init when init.hs changes. What do I have to do to make this happen?

Here's an example terminal session (after editing init.hs):

$ cabal build
Building myproject-0.0.0...
Preprocessing library myproject-0.0.0...
Registering myproject-0.0.0...
$ rm -rf dist/build/myproject/init
$ cabal build
Building myproject-0.0.0...
Preprocessing library myproject-0.0.0...
Registering myproject-0.0.0...

Thank you.

like image 996
Gregory Avatar asked Jul 31 '12 17:07

Gregory


1 Answers

You can manage multiple executables by passing them as arguments to cabal build and cabal run. For example, cabal build init. The first executable is the default if no target name is given.

like image 164
Anthony Avatar answered Oct 27 '22 04:10

Anthony