我正在从源代码构建GHC(7.8在ARM上,因为没有二进制版本),并注意到它在某些时候这样做了:
"inplace/bin/ghc-stage1" -static -optc-DTHREADED_RTS -optc-DDEBUG -H32m \
-O -Iincludes -Iincludes/dist -Iincludes/dist-derivedconstants/header \
-Iincludes/dist-ghcconstants/header -Irts -Irts/dist/build -DCOMPILING_RTS \
-package-name rts -dcmm-lint -i -irts -irts/dist/build \
-irts/dist/build/autogen -Irts/dist/build -Irts/dist/build/autogen \
-O2 -O0 -c rts/StgMiscClosures.cmm -o rts/dist/build/StgMiscClosures.thr_debug_o
嗯,这是一个命令中的-O
,-O2
和-O0
!
这是什么原因,在这种情况下哪个标志优先?
答案 0 :(得分:0)
processArgs
从左到右处理命令行参数(参见process
in CmdLineParser.processArgs
。此外,-O
标志的语义是这样的,它们每个都打开/关闭某个个别优化的子集(参见updOptLevel
)。因此,在您的示例-O0
中,“获胜”,因为它会覆盖-O
和-O2
的效果。