2012-07-31 18 views
10

Sto lavorando a un sito Web utilizzando Yesod. Ho il normale build in esecuzione ma non riesco a popolare il mio database in modo affidabile. Ho un secondo programma Haskell che popola il database e ho aggiunto al mio file di cabala in questo modo:Cabal Multiple Executables

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 

Il problema è che quando faccio funzionare 'costruire cabala' non ricostruire init quando init.hs i cambiamenti. Cosa devo fare per farlo accadere?

Ecco una sessione di esempio terminale (dopo la modifica 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... 

Grazie.

+0

Il titolo della domanda menziona più eseguibili. C'è un'altra stanza eseguibile che non ha questo problema nello stesso file di cabala? – Heatsink

+0

Sei sicuro che 'init' non viene ricostruito? Dovrai guardare sotto 'dist/build' per vedere il nuovo eseguibile, o eseguire' cabal install' se vuoi che il nuovo eseguibile sia messo altrove. –

+0

Ho aggiornato lo snippet di cabala qui sopra. Quando modifico init.hs (che si trova all'interno della directory Init /) non ricompila nulla. cabal corre ed esce senza invocazioni ghc. Ho un link simbolico all'eseguibile in dist/build che sto usando per eseguire il codice. – Gregory

risposta

4

È possibile gestire più file eseguibili passandoli come argomenti su cabal build e cabal run. Ad esempio, cabal build init. Il primo eseguibile è l'impostazione predefinita se non viene specificato alcun nome di destinazione.

Problemi correlati