10

私はかなり単純なhaskellプロジェクトをセットアップしていて、実際にコーディングを開始する前に、フレームワークをテストなどで動作させたいだけです。実行可能ファイルのソースファイルが/srcディレクトリ(/プロジェクトのルート)にあり、テストが/testsuiteディレクトリにあります。mainの実装としてで呼び出さ/testsuiteれる単純なテストファイルが含まれています。問題は、私が走るときですTestSuite.hsmain = Test.Framework.defautMain tests

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

警告が表示されます

output was redirected with -o, but no output will be generated because there is no main module.

を指定しない場合、ビルドは正常に機能します--enable-tests。私のカバールファイルは次のとおりです。

Name:                Example
Version:             0.1
Synopsis:            Synopsis
Description:
    Long description.
License:             GPL
License-File:        LICENSE
Author:              SeanK
Maintainer:          email@example.com
Category:            Development
Build-Type:          Simple
Cabal-Version:       >= 1.8

Test-Suite test
    Type:               exitcode-stdio-1.0
    Main-Is:            TestSuite.hs
    Build-Depends:      base >= 3 && < 5,
                        test-framework,
                        test-framework-quickcheck
                        -- QuickCheck
    Hs-Source-Dirs:     src,
                        testsuite

Executable example
    Main-Is:            Main.hs
    -- Other-Modules:       
    Build-Depends:      base >= 3 && < 5,
                        haskell98
    Hs-Source-Dirs:     src
    Ghc-Options:        -Wall

現在(==>)を使用していないため、QuickCheckを無効にしました。これは、現在必要な唯一の関数です。残りは簡単なはずです。どんな助けでも大歓迎です。

4

3 に答える 3

17

TestSuite.hsたとえば、ファイル内のモジュール名をのMainよう定義する必要があります。

Haskell 98レポートからの引用:

Haskellプログラムはモジュールのコレクションであり、慣例により、そのうちの1つはMainと呼ばれ、値mainをエクスポートする必要があります。

于 2012-08-26T20:43:25.433 に答える
4

Fedorが提案するようにモジュールの名前を変更する代わりにTestSuite、GHCオプションを追加して、メインモジュールの名前をCabalファイルに設定できます。

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

どうやらカバルmain-isとGHCmain-isは違います。どういう意味かわかりません。

于 2016-06-16T16:55:48.213 に答える
0

Stack、cabal2nix、またはツールなどのhpack準拠のシステムを使用している場合は、ファイルからファイルhpackを生成できます。の下のエントリには、次の2つの方法のいずれかで機能するキーを指定できます。.cabalpackage.yamlexecutables:package.yamlmain:

  1. ファイル名を指定すると、.hsそのファイル名は生成されたCabalファイルの行に直接コピーされmain-is:、Cabalセマンティクスが提供されます。

  2. モジュール名またはモジュールとエクスポートされた定義名(例、FooまたはFoo.startup)を指定すると、適切なものghc-options: -main-is ...が生成されたCabalファイルに追加さmain-is:れ、モジュール名(例main-is: Foo.hs)から生成されたファイル名になります。

を使用したくないpackage.yamlが、Cabalファイルを正しく機能させるのに問題がある場合でも、一時的で最小限のファイルを設定して、出力を確認し、package.yaml実行していることを確認するだけの価値がある場合があります。hpack同じ方法でCabalファイルを作成します。

その価値について、最近のプロジェクトの1つにある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
于 2022-01-26T03:34:14.410 に答える