一个cabal文件中包含两个可执行文件;堆栈构建无法识别它们

时间:2018-12-13 12:33:24

标签: haskell cabal haskell-stack

我正在尝试使2个可执行文件成为“项目”。此问题的所有重复项均无济于事-他们的答案不能解决我的问题。我有这样的.cabal文件:

name:                int-tests
version:             0.1.0.0
synopsis:            Integration Tests Suite
description:         Integration Tests Suite
license:             AllRightsReserved
author:              Author name here
maintainer:          example@example.com
copyright:           2018 Author name here
build-type:          Custom
extra-source-files:  README.md
cabal-version:       >=1.10

library
  hs-source-dirs:      common
  exposed-modules:     Common
  build-depends:       base
                     , text
                     , aeson
                     , network-uri
  default-language:    Haskell2010
  ghc-options:         -Wall -Werror

executable api-tests-exe
  hs-source-dirs:      api
  main-is:             Main.hs
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall -Werror
  build-depends:       base
                     , hspec
                     , QuickCheck
  default-language:    Haskell2010

executable e2e-tests-exe
  hs-source-dirs:      e2e
  main-is:             Main.hs
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall -Werror
  build-depends:       base
                     , hspec
                     , QuickCheck
  default-language:    Haskell2010

,当我致电stack ide targets时,我没有看到这两个目标。因此,stack build api-testsstack build e2e-tests也不起作用。

如何为堆栈创建2个目标的项目?我也尝试了package.yaml,但结果是一样的。堆栈版本为1.9.1。我有像这样的文件夹树:

api/
...
e2e/
...

Main.hs文件的内容如下:

module Main (main) where
main :: IO ()
main = print "Hello"

我也尝试了选项-main-is Main,但没有成功。 错误如下:

Error: While constructing the build plan, the following exceptions were encountered:

Unknown package: api-tests

2 个答案:

答案 0 :(得分:1)

AFAIK,stack build始终建立您的所有目标。但是,如果只想运行一个可执行文件,则需要全名,包括-exe。因此,stack exec api-tests-exestack exec e2e-tests-exe

但是您真正想要做的是使这些测试目标:https://www.haskell.org/cabal/users-guide/developing-packages.html#test-suites

答案 1 :(得分:0)

问题在stack.yaml文件中,我必须添加“。”文件夹中的“包装:”部分。