簡體   English   中英

在 GHC 中編譯

[英]Compiling in GHC

我正在學習 Haskell,一個簡單的疑問讓我感到震驚,這兩個使用 GHC 編譯的命令之間有什么區別(fac 是一個計算階乘的程序):

ghc -o fac fac.hs

ghc fac.hs

現在要運行該程序,我只需執行 fac.exe(我使用的是 Windows)。

鑒於兩者都有效,哪一個是正確的? 兩個都? 最好使用哪一種?

兩者都可以。 -o 命令所做的唯一一件事就是確定生成的可執行文件的名稱。 就 Haskell 而言,它沒有任何區別。

就我個人而言,我喜歡總是使用“-o”來使事情變得明確(因為我一般喜歡避免隱式默認值)並使其看起來與其他編譯器更相似(例如,gcc C 編譯器強制您使用它的“ -o" 選項,因為它使用的默認名稱否則非常難看)

以前是這樣寫的

ghc fac.hs

沒有真正起作用。 相反,你不得不說

ghc --make fac.hs

區別在於前者編譯fac.hs不做任何其他事情,而后者檢查fac.hs使用任何其他需要重新編譯的模塊,自動包含所需的任何包,等等。

但是,默認行為已更改,上面的兩個命令現在是相同的。 (我忘記了這到底是什么時候發生的,但現在已經有一段時間了。)盡管如此,您仍然可以看到帶有顯式--make開關的文檔和示例,我個人喜歡將其包含在內。 但這只是我。

-o開關為您提供的唯一功能是更改輸出名稱的能力。 如果您有Main.hs並且您希望將輸出稱為MyCoolProgram或其他任何內容,這將很有用。 有一件事我說:在Linux下, fac.hs (如果它是Main模塊)將編譯為可執行文件名為fac ,但在Windows下它會被稱為fac.exe 如果您使用-o對二進制名稱進行硬編碼,則不會發生這種情況。 而且我不確定您是否可以運行不以.exe結尾的 Windows 二進制文件...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM