我正在学习Haskell并且一个简单的疑问让我感到震惊,使用GHC编译这两个命令之间有什么区别(fac是一个计算阶乘的程序):
ghc -o fac fac.hs
和
ghc fac.hs
现在运行程序我只做fac.exe(我正在使用Windows)。
鉴于两者的作用哪一个是正确的?都?哪一个最合适?
答案 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
...