3

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

ghc -o fac fac.hs

ghc fac.hs

现在要运行程序,我只需执行 fac.exe(我使用的是 Windows)。

鉴于两者都有效,哪一个是正确的?两个都?哪一个是最可取的?

4

2 回答 2

3

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

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

于 2012-12-02T01:20:22.423 回答
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硬编码二进制名称,则不会发生这种情况。而且我不确定您是否可以运行不结束的 Windows 二进制文件.exe...

于 2012-12-02T09:13:53.203 回答