IT干货网

Haskell 堆栈未构建测试可执行文件

davidwang456 2025年02月15日 编程设计 98 0

背景

我正在 Haskell 中构建一个日志文件解析器。我正在使用堆栈来构建它。运行 stack build命令工作愉快,我的项目编译。运行stack test但是,会产生以下错误:

parser-test: executable not found 

我在错误消息上方看到以下警告,但我不知道如何避免它所指的重定向。
Warning: output was redirected with -o, but no output will be generated because there is no Main module. 

相关文件

我还没有编写任何测试,所以测试文件是由 stack new 创建的。 .我的 cabal 文件如下所示:
... 
category:            Executable 
build-type:          Simple 
-- extra-source-files: 
cabal-version:       >=1.10 
 
library 
hs-source-dirs:      src 
exposed-modules:     LogParser 
build-depends:       base >= 4.7 && < 5 
                    , attoparsec 
                    , bytestring 
                    , old-locale 
                    , time 
default-language:    Haskell2010 
 
executable parser-exe 
hs-source-dirs:      app 
main-is:             Main.hs 
ghc-options:         -threaded -rtsopts -with-rtsopts=-N 
build-depends:       base 
                    , attoparsec 
                    , bytestring 
                    , old-locale 
                    , time 
                    , parser 
default-language:    Haskell2010 
 
test-suite parser-test 
type:                exitcode-stdio-1.0 
hs-source-dirs:      test 
main-is:             Spec.hs 
build-depends:       base 
                    , attoparsec 
                    , bytestring 
                    , hspec 
                    , hspec-attoparsec 
                    , old-locale 
                    , time 
                    , parser 
ghc-options:         -threaded -rtsopts -with-rtsopts=-N 
default-language:    Haskell2010 
 
source-repository head 
type:     git 
... 

我想我遗漏了一些东西,但我找不到我遗漏的文件记录在哪里。

期望的行为

我应该看到 Test suite not yet implemented stack documentation 中概述的消息.

请您参考如下方法:

test/Spec.hs的内容模板中的文件是:

main :: IO () 
main = putStrLn "Test suite not yet implemented" 
您可以在 commercialhaskell/stack-templates 查看此内容在 new-template.hsfiles .
我不确定 module ParserSpec where 在哪里line 来自(在 the Github issue 中提出),但它不是模板的一部分。在我的系统上, stack new bar && cd bar && stack test成功。
至于 Main背后的原因模块要求:它来自 Cabal 库,据我了解,它是由于 Cabal 支持的其他编译器的限制而添加的。换句话说,GHC 在技术上可以允许此代码编译,但 Cabal 不会传入这些参数以保持与其他编译器的兼容性。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!