我正在学习Haskell,一个简单的疑问引起了我的注意,用GHC编译这两个命令有什么区别(fac是一个计算阶乘的程序):
ghc -o fac fac.hs
和
ghc fac.hs
现在,为了运行该程序,我只需执行fac.exe (我使用的是Windows)。
既然这两种方法都有效,哪一种是正确的?两者都有?哪一种最适合使用?
发布于 2012-12-02 01:20:22
两个人都没事。-o命令所做的唯一事情就是确定生成的可执行文件的名称。就哈斯克尔号而言,这并没有什么区别。
就我个人而言,我喜欢总是使用"-o“来显式(因为我一般喜欢避免隐式默认值),并使它看起来更类似于其他编译器(例如,gcc C编译器强制您使用它的"-o”选项,因为它使用的默认名称非常难看)。
发布于 2012-12-02 09:13:53
以前是这样写的
ghc fac.hs不是真的起作用。相反,你不得不说
ghc --make fac.hs区别在于前者编译fac.hs而不执行其他操作,而后者检查fac.hs是否使用任何其他需要重新编译的模块,自动包含所需的任何包,等等。
但是,默认行为已经更改,以上两个命令现在是相同的。(我完全忘记了这是什么时候发生的,但那是很久以前的事了。)不过,您仍然可以看到带有显式--make开关的文档和示例,我个人喜欢将其包括在内。但只有我一个人。
-o开关唯一能让您更改输出名称的功能。如果您有(比方说) Main.hs,并且希望输出被称为MyCoolProgram或其他什么的话,这可能很有用。我要说的一件事是:在Linux下,fac.hs (如果是Main模块)将编译成一个名为fac的可执行文件,但在fac下它将被称为fac.exe。如果使用-o对二进制名称进行硬编码,则不会发生这种情况。我不确定你能不能运行一个不结束.exe的Windows二进制文件.
https://stackoverflow.com/questions/13665495
复制相似问题