簡體   English   中英

"Cabal 輸出被重定向但未生成"

[英]Cabal output is redirected but not generated

我有一個相當簡單的haskell項目設置,我只想讓框架在我真正開始編碼之前進行測試等等。 我在\/src<\/code>目錄(其中\/<\/code>是項目的根目錄)中有可執行文件的源文件,在\/testsuite<\/code>目錄中有我的測試。 \/testsuite<\/code>包含一個名為TestSuite.hs<\/code>的簡單測試文件,其中main = Test.Framework.defautMain tests<\/code>作為 main 的實現。 問題是,當我跑步時

cabal clean && cabal configure --enable-tests && cabal build

您應該在TestSuite.hs文件中將模塊名稱定義為Main ,例如那里

引自Haskell 98 報告

Haskell 程序是一組模塊,按照慣例,其中一個模塊必須稱為 Main,並且必須導出值 main。

與其像 Fedor 建議的那樣重命名TestSuite模塊,您可以添加一個 GHC 選項來將主模塊的名稱設置為您的 Cabal 文件:

Test-Suite testFedor
    ghc-options:    -main-is TestSuite

顯然 Cabal main-is和 GHC main-is是不同的。 我不知道以什么方式。

如果您使用的是與hpack兼容的系統,例如 Stack、cabal2nix 或僅使用hpack工具,則可以從package.yaml文件生成.cabal文件。 對於executables:package.yaml中,您可以指定一個以兩種方式之一工作的main:鍵:

  1. 給定一個.hs文件名,該文件名將直接復制到生成的 Cabal 文件中的main-is:行,提供 Cabal 語義。

  2. 給定一個模塊名稱或模塊和導出的定義名稱(例如FooFoo.startup ),適當的ghc-options: -main-is ...將被添加到生成的 Cabal 文件中,而main-is:將是生成的文件名來自模塊名稱(例如main-is: Foo.hs )。

如果您不想使用package.yaml但難以讓 Cabal 文件正常工作,可能仍然值得設置一個臨時的、最小的package.yaml並在其上運行hpack以查看它的輸出生成並確認您正在以相同的方式編寫 Cabal 文件。

對於它的價值,這是一個exectuables:的示例:我最近的一個項目中package.yaml的部分:

executables:
  hello:
    source-dirs: src/
    main: Hello.main

以及我生成的.cabal文件中的相關代碼片段:

executable hello
  main-is: Hello.hs
  hs-source-dirs:
    src/
  ghc-options: -main-is Hello

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM