在GHC中编译

时间:2012-12-02 01:17:56

标签: haskell compilation ghc

我正在学习Haskell并且一个简单的疑问让我感到震惊,使用GHC编译这两个命令之间有什么区别(fac是一个计算阶乘的程序):

  

ghc -o fac fac.hs

  

ghc fac.hs

现在运行程序我只做fac.exe(我正在使用Windows)。

鉴于两者的作用哪一个是正确的?都?哪一个最合适?

2 个答案:

答案 0 :(得分:3)

两者都可以。 -o命令唯一的作用是确定生成的可执行文件的名称。就Haskell而言,它没有任何区别。

就个人而言,我喜欢总是使用“-o”来使事情明确(因为我喜欢避免一般的隐式默认值)并使它看起来更像其他编译器(例如,gcc C编译器强迫你使用它的“-o”选项,因为它使用的默认名称非常难看)

答案 1 :(得分:0)

曾经是写作

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二进制文件