我正在使用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
则不然。有什么想法吗?
答案 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 -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手动编译脚本。