SORU
15 NİSAN 2012, Pazar


Tekrarını azaltmak için ne yap-bağlı bir alanları .cabal dosya?

İşte .dosya cabal:

Name:                myprogram
Version:             0.1
-- blah blah blah
Cabal-version:       >=1.9.2

Executable myprogram
  HS-source-dirs:       src
  Main-is:              Main.hs
  Build-depends:        attoparsec == 0.10.*,
                        base == 4.3.*,
                        -- long long list of packages

Test-Suite test
  HS-source-dirs:       test, src
  Type:                 exitcode-stdio-1.0
  Main-is:              Main.hs
  Build-depends:        attoparsec == 0.10.*,
                        base == 4.3.*,
                        -- long long list of packages
                        QuickCheck == 2.4.*

Orada build-depends test paketleri suite ile uzun listeyi değiştirmek için ne yapabilirim "yürütülebilir olarak aynı, artı QuickCheck"?

Düzenleme:sürüm bilgileri.

  • cabal-dev 0.9
  • cabal-yükleme 0.10.2
  • Cabal kütüphane 1.10.2.0
  • DZD 7.0.4
  • Haskell Platform 2011.4.0.0

CEVAP
19 AĞUSTOS 2013, PAZARTESİ


Orada build-depends test paketleri suite ile uzun listeyi değiştirmek için ne yapabilirim "yürütülebilir olarak aynı, artı QuickCheck"?

Bildiğim kadarıyla yok. Ancak, sadece bağlıdır paketleri oluşturmak sonra, üç hedef halinde proje yapılandırarak listesi bahsetmek için bir yol var:

  1. tüm kodu içerir ve uzun ihtiyacı olan bir kütüphane inşa-bağlı liste.
  2. sadece bir dosya oluşur, ve temel ve yukarıdan Kütüphanesi bağlı olan bir yürütülebilir.
  3. bir yukarıdan kütüphane bağlıdır-suite test ve test kullanıyorsunuz paketleri.

Belki de bu yaklaşım indygemma cevap öneriyor ama cabal dosyası oldukça Norman Ramsey yorum belirttiği gibi bunu başarmak olmaz önerdi. İşte cabal dosyası ne gerek ana hatlarını. Benim için çalışan tam bir örnek için, this cabal file bakabilirsiniz.

name: my-program
version: ...

library
  hs-source-dirs: src-lib
  build-depends: base, containers, ...
  exposed-modules: My.Program.Main, ...

executable my-program
  hs-source-dirs: src-exec
  main-is: my-program.hs
  Build-depends: base, my-program

test-suite tests
  type: exitcode-stdio-1.0
  hs-source-dirs: src-test
  main-is: tests.hs
  other-modules: ...
  build-depends: base, my-program, test-framework, ...

Önemli noktalar:

  • Üç hedefi için üç ayrı kaynak dizin vardır. Bu gerekli diğer hedefleri oluştururken kütüphane dosyaları yeniden gelen dzd durdurmak.

  • Uygulama tüm kod kütüphanede. Yürütülebilir sarıcı, bu gibi:

    import My.Program.Main (realMain)
    main = realMain
    
  • Kütüphane test için gerekli olan tüm modülleri gösterir.

Son nokta bu yaklaşımın dezavantajı özeti: iç modülleri ifşa etmek zorunda kalırsınız. Ana parası bu yaklaşım olduğunu size daha az tekrar olarak cabal dosyası, ve belki daha da önemlisi, daha az tekrar yap işlemi: kütüphane kodu olacak inşa sadece bir kez, ve sonra bağlı iki yürütülebilir ve test suite.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • hoorahjencar

    hoorahjencar

    6 HAZİRAN 2007
  • Jaclyn W

    Jaclyn W

    5 Mayıs 2006