2011-06-28 19 views
29

Mam program napisany w Haskell i przeznaczony do kompilacji z GHC. Program bardzo dobrze skaluje się na wielu rdzeniach, dlatego bardzo ważne jest umożliwienie wielowątkowości. W moim pliku .cabal dodałem ghc-options: -O3 -threaded do połączenia z gwintowanym środowiskiem wykonawczym. Problem polega na tym, że przy takim podejściu użytkownik musiałby uruchomić program pod numerem foo +RTS -N, co wydaje się nieco zagadkowe i mało przyjazne dla użytkownika.Budowanie z flagami wykonawczymi przy użyciu cabal i ghc

Jak mogę odróżnić cabal/ghc, aby te flagi środowiska wykonawczego były niewidoczne dla użytkownika? Przeczytałem o --with-rtsopts, ale GHC (7.0.3) po prostu wypluwa unrecognized flag kiedy próbuję go użyć.

Odpowiedz

28

Flaga jest -with-rtsopts, a nie --with-rtsopts, więc należy dodać -with-rtsopts=-N do pola opcji ghc. GHC Flag Reference.

Pamiętaj, że będzie to wymagało również połączenia z obsługą środowiska wykonawczego przez dodanie opcji -rtsopts do opcji ghc.

+0

Dziękuję, pomogło mi to! Próbowałem także włączyć flagę '-g1' z' -with-rtsopts = "- N-g1" ', ale otrzymałem" nierozpoznaną flagę: -g1 ". Zarówno '-N', jak i' -g1' działają poprawnie oddzielnie. –

+1

@Viktor Dahl: Myślę, że przyczyną problemu są cytaty. Spróbuj użyć pojedynczych cudzysłowów lub wielu linii '-with-rtsopts'. Jeśli to rozwiąże, to prawdopodobnie jest to błąd ghc (lub błąd dokumentacji). –

+7

Pojedyncze cytaty nie rozwiązały go, ale użyłem dwóch '-with-rtsopts'. –

Powiązane problemy