2015-01-21 14 views
5

Po uruchomieniu cabal build używa jakiegoś kompilatora Haskell do kompilowania plików wykonywalnych i/lub testowych w moim pliku .cabal.Jak korzystać z dwóch różnych kompilatorów dla różnych celów w pliku .cabal?

Czy mogę kontrolować, który kompilator jest używany do różnych celów? Idealnie chciałbym mieć oddzielne cele kompilacji, które używają ghc i ghcjs w tym samym pliku .cabal. Wydaje mi się, że ktoś może chcieć użyć ghc i hugs lub dwóch wersji ghc w tym samym projekcie. Czy to jest obecnie możliwe?

Ponadto, w jaki sposób cabal decyduje, jakiego kompilatora użyć podczas uruchamiania cabal build? Widziałem, że istnieje opcja kompilatora w moim pliku ~/.cabal/config, ale zmiana go z ghc na ghcjs i odkomentowanie go nie zmieniły tego, co robi cabal build.

Odpowiedz

4

Używany kompilator jest określany podczas kroku konfiguracji (lub podczas niejawnego kroku konfiguracji kroku, który nie współdzieli opcji konfiguracyjnych z poprzednim krokiem konfiguracji). Jest również określane przez podmiot budujący pakiet i nie może na niego wpływać osoba pisząca paczkę. Prawdopodobnie to, co ci się przydarzyło, to to, że poprzednia konstrukcja cabal niejawnie wywołała krok konfiguracji i wybrała kompilator; przyszłe kompilacje zachowają poprzedni wybór kompilatora nad utknięciem w globalnym pliku konfiguracyjnym. Możesz to zrekompensować, po prostu ręcznie ponownie uruchamiając cabal configure.

Możliwe jest spowodowanie awarii kompilacji przy niewłaściwej implementacji, np.

library 
    if impl(ghc) 
     buildable: False 

uniemożliwi cabalowi próbę zbudowania paczki przy użyciu GHC. Jednak nie jest to przydatne do budowania oddzielnych części pakietu z osobnymi kompilatorami, ponieważ cabal odmówi zainstalowania pakietu, chyba że może zbudować całość za pomocą jednego kompilatora.

Prawdopodobnie najlepszym sposobem na zrobienie oddzielnych pakietów dla rzeczy, które powinny być budowane przez oddzielne kompilatory.

Powiązane problemy