2012-07-31 11 views
10

Estoy trabajando en un sitio web usando Yesod Tengo la compilación normal ejecutándose pero parece que no puedo completar mi base de datos de manera confiable. Tengo un segundo programa Haskell que rellena la base de datos y que he añadido a mi archivo de Cabal así: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 

El problema es que cuando corro 'construir Cabal' que no vuelve a generar cuando init init.hs cambios. ¿Qué tengo que hacer para que esto suceda?

He aquí un ejemplo de sesión de terminal (después init.hs de edición):

$ 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... 

Gracias.

+0

El título de la pregunta menciona varios archivos ejecutables. ¿Hay alguna otra estrofa ejecutable que no tenga este problema en el mismo archivo cabal? – Heatsink

+0

¿Estás seguro de que 'init' no se reconstruye? Tendrás que mirar debajo de 'dist/build' para ver el nuevo ejecutable, o ejecutar' cabal install' si quieres que el nuevo ejecutable se coloque en otro lugar. –

+0

He actualizado el fragmento cabal arriba. Cuando modifico init.hs (que se encuentra dentro del directorio Init /) no recompila nada. cabal corre y sale sin invocaciones de ghc. Tengo un enlace simbólico al ejecutable en dist/build que estoy usando para ejecutar el código. – Gregory

Respuesta

4

Puede gestionar varios ejecutables pasándolos como argumentos a cabal build y cabal run. Por ejemplo, cabal build init. El primer ejecutable es el predeterminado si no se proporciona un nombre de destino.