2012-12-10 24 views
19

Kullanmak istediğim Hackage platformuna özgü birkaç kitaplık var (örneğin, inotify, kqueue). Ancak, koşullu derleme kullanarak platformlar arasında nasıl geçiş yapılacağına dair belgeler biraz seyrek görünüyor. İlgili belgeleri bulma konusunda sorun yaşıyorum ...Platform bağımsız kod nasıl yazılır Haskell (ghc)

  1. Platformlar arasında geçiş yapmak için hangi önişlemci tanımlarını kullanabilirim?

  2. Kablolu dosyamı, sırasıyla linux/osx'te inotify/kque/include dahil etmek/hariç tutmak için nasıl kurabilirim?

Burada belgelenmiş olmanın başkaları için de yararlı olabileceğini umuyorum, bu yüzden diğer ortak platformlardan bahsetmeye değer olabilir. Bu şeyleri her yerde aramak aptalca. Cabal documentation gösterildiği gibi paket açıklamasına extensions: CPP ekleyin ve tanımlamak GHC documentation

  • belirtilen

  • cevap

    12
    1. C önişlemci seçeneği -cpp (veya {-# LANGUAGE CPP #-} kullanarak) ile kombinasyon halinde os_HOST_OS bayrakları bir göz atın böyle özel bir bayrak:

      if os(linux) 
          cpp-options: -DINOTIFY 
      if os(darwin) 
          cpp-options: -DKQUEUE 
      

    Daha sonra kaynağınızda #ifdef kullanabilirsiniz.

    +7

    Mümkünse CPP kullanmak yerine farklı paketler içermek için os_HOST_OS kullanılması tercih edilir. –

    +4

    Ayrıca, farklı işletim sistemleri için farklı yazılması gereken tüm modüller varsa, tüm kaynak ağaçları arasında seçim yapmak için cabal'ın os komutlarını da kullanabilirsiniz. İçinde bir 'cpp-options' bloğu koymak yerine bir "hs-source-dirs" bloğu koymak yerine. –

    +0

    Teşekkür ederim, iyi cevap –

    İlgili konular