`-ddump-cmm`无法在堆栈脚本中工作

时间:2017-10-25 10:52:48

标签: haskell haskell-stack

我正在使用Stack编写脚本,并希望看到GHC的C--输出。

我的脚本顶部有以下内容:

#!/usr/bin/env stack
{- stack script
   --resolver lts-9.9
   --install-ghc
   --package doctest
   --package QuickCheck
   --
   -ddump-cmm
-}

-ddump-simpl的输出会打印到终端,但-ddump-cmm则不然。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果使用-v标志手动运行脚本,请使用:

$ stack -v script --resolver lts-9.9 --install-ghc
   --package doctest --package QuickCheck -- -ddump-cmm Script.hs

您可以看到脚本实际上是使用runghc运行的,如下所示:

runghc -hide-all-packages -packageQuickCheck -packagebase 
    -packagedoctest -ddump-cmm Script.hs

事实证明runghc使用等同于:

的东西来调用GHC
ghc -ignore-dot-ghci -x hs -hide-all-packages -packageQuickCheck
   -packagebase -packagedoctest -ddump-cmm
   -e ":set prog Script.hs" -e ":main" Script.hs

如果您尝试以这种方式手动调用GHC,您会发现-ddump-simpl标志生成输出,但-ddump-cmm没有。似乎-e ":main"参数将GHC从“提前编译”模式切换到即时编译。仍然会生成“简化”,但CMM可能是根据需要生成的,因此忽略-ddump-cmm标志。

stack script命令有--compile标志,但是当该标志生效时,不清楚如何将选项传递给GHC。 (我认为,如果不使用runghc,您可以将编译器标记传递给--compile,这真是一个意外。)

我认为最好的办法就是用GHC手动编译脚本。