2012-07-31 9 views
10

Pracuję na stronie internetowej przy użyciu Yesod Mam normalną pracę, ale nie mogę zapełnić mojej bazy danych niezawodnie. Mam drugi program Haskell, że zapełnia bazę danych i Dodałem to do mojego pliku cabal tak: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 

Problemem jest to, że gdy uruchamiam „Cabal” build to nie odbudować init, gdy init.hs zmiany. Co muszę zrobić, aby to się stało?

Oto przykład sesja terminala (po init.hs edycji):

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

Dziękuję.

+0

Tytuł pytania wspomina o wielu plikach wykonywalnych. Czy istnieje inna wykonywalna zwrotka, która nie ma tego problemu w tym samym pliku cabal? – Heatsink

+0

Czy jesteś pewien, że 'init' nie zostanie przebudowany? Będziesz musiał zajrzeć pod 'dist/build', aby zobaczyć nowy plik wykonywalny, lub uruchomić' cabal install', jeśli chcesz, aby nowy plik wykonywalny został umieszczony w innym miejscu. –

+0

Zaktualizowałem fragment kodu cabal powyżej. Kiedy modyfikuję init.hs (który znajduje się w katalogu Init /), nie rekompiluje niczego. Cabal działa i wychodzi bez żadnych wywołań ghc. Mam dowiązanie symboliczne do pliku wykonywalnego w dist/build, którego używam do uruchomienia kodu. – Gregory

Odpowiedz

4

Można zarządzać wieloma plikami wykonywanymi, przekazując je jako argumenty do cabal build i cabal run. Na przykład cabal build init. Pierwszy plik wykonywalny jest domyślny, jeśli nie podano nazwy celu.