2017-04-05 1 views
1

나는 (그 어떤 바이너리 버전이 없습니다로, ARM에 7.8) 다시 소스에서 GHC를 구축하고, 어떤 시점에서이 작업을 수행 발견 해요 :자체 빌드의 ghc가 모순 된 최적화 플래그를 전달하는 이유는 무엇입니까?

"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

processArgs 처리 명령 줄 인수 왼쪽에서 오른쪽 (process in CmdLineParser.processArgs 참조. 또한, -O 플래그의 의미가 그들 각각은 온되도록 인 개별 최적화 (updOptLevel 참조)의 온/오프 특정 서브셋. 그렇게 이 -O-O2의 효과를 덮어 이후 예를 -O0 "승리".

+0

좋아. 그리고 GHC 제거 귀찮게하지 않고 불필요한 적은 특정 플래그 그림자, 콜 스택의 일종으로 명령 줄을 사용하여 공격이 구축 앞의 것들? – leftaroundabout

+0

그래, 그래 보인다. – Cactus

관련 문제