如何为Cabal / Stack包指定源文件,而不仅仅是hs-source-dirs / source-dirs?

时间:2019-02-28 19:54:02

标签: haskell testing cabal haskell-stack

我有一个使用Stack(因此称为Cabal)构建的Haskell项目。 现在我有src /目录和tests /目录,但是我想将测试与源文件混合在一起,这意味着所有内容都将转到src /目录。

为此,我需要将tests构建信息源文件定义为src /中具有.test.hs扩展名的文件。 但是,似乎定义源文件的唯一选择是在堆栈中使用source-dirs或在Cabal中使用hs-source-dirs,这意味着我必须将src设置为source-dirs,这似乎是错误的,因为然后也可以捕获普通的源文件。

这是我package.yaml的一部分:

tests:
  myapp-test:
    main:                Main.hs
    source-dirs:         test
    ...

虽然我希望它像这样:

tests:
  myapp-test:
    main:                Main.hs
    source-files:         src/**/*.test.hs
    ...

是否有这样的选项,例如源文件,或任何其他方式?谢谢!

1 个答案:

答案 0 :(得分:1)

将目录srctests分开是惯例,但不是必须的。 hs-source-dirs默认为.

Cabal自己查找所有源文件。 否则会有extra-source-files

您的选择在模块级别:exposed-modulesother-modules。 您可以将它们用于库和可执行文件。

在您的.cabal文件中:

  • 每个可执行文件使用一个executable <name>条目。 main-is是带有module Main where ...的文件。
  • 每个库使用一个library <name>
  • 每个测试应用使用一个test-suite <name>条目。

    • type是必需的(例如type: exitcode-stdio-1.0)。
    • main-is是测试文件。
    • ghc-options: -main-is <your.hs>
    • 测试文件中的
    • 也有一个
      main :: IO ()
      main = hspec spec -- or: spec1 >> spec2
    

用法:

  cabal new-build
  cabal new-test [<which test>]
  cabal new-run <file without path>

深入dist-newstyle,您会发现

  • x目录下的可执行文件
  • t目录下的测试可执行文件
  • .so目录下的库l文件

链接: