在cabal文件中,我指定了GHC选项-Wall
和-O2
:
name: Test
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.8
executable Test
hs-source-dirs: src
main-is: Test.hs
build-depends: base >=4.8 && <4.10
ghc-options: -Wall -O2
当我编译程序Test.hs时:
data Color = Red | Green | Blue
foo :: Color -> Int
foo Red = 0
foo Green = 1
-- foo Blue is intentionally missing!!
我收到错误:
Preprocessing executable 'Test' for Test-0.1.0.0...
[1 of 1] Compiling Main ( src/Test.hs, .stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0/build/Test/Test-tmp/Main.o )
/home/user/Projekte/HaskellTutorials/Test/src/Test.hs:1:1: error:
The IO action ‘main’ is not defined in module ‘Main’
-- While building package Test-0.1.0.0 using:
/home/user/.stack/setup-exe-cache/x86_64-linux-nopie/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --build
dir=.stack-work/dist/x86_64-linux-nopie/Cabal-1.24.2.0 build exe:Test --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
关于缺少主要操作的错误不是问题。 查看第二行末尾的文本:
构建exe:测试--ghc-options“-ddump-hi -ddump-to-file”
为什么我看不到GHC选项 -Wall -O2 ? (我担心,我做了一些愚蠢的小错误......)
PS:
堆栈版本是:版本1.5.1,Git版本600c1f01435a10d127938709556c1682ecfd694e(4861提交)x86_64 hpack-0.17.1
LTS:8.17
答案 0 :(得分:3)
选项-ddump-hi -ddump-to-file
正在被Stack传递给.cabal
文件中指定的选项,然后再将它们传递给GHC。
如果您运行Stack with:
stack -v --cabal-verbose
并搜索输出,您会看到您的选项 实际上已传递给GHC。
正如@epsilonhalbe所指出的那样,当发现main
缺失时,GHC并没有抱怨更小的问题,所以如果你添加:
main = undefined
到你的程序底部,你会收到你期待的警告。