[英]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.