我有一个使用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
...
是否有这样的选项,例如源文件,或任何其他方式?谢谢!
答案 0 :(得分:1)
将目录src
和tests
分开是惯例,但不是必须的。
hs-source-dirs
默认为.
。
Cabal自己查找所有源文件。
否则会有extra-source-files
。
您的选择在模块级别:exposed-modules
,other-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
文件链接:
*.cabal
,cabal/Cabal/doc/buildinfo-fields-reference.rst