首页
学习
活动
专区
圈层
工具
发布

GHC编译
EN

Stack Overflow用户
提问于 2012-12-02 01:17:56
回答 2查看 218关注 0票数 3

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

ghc -o fac fac.hs

ghc fac.hs

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

既然这两种方法都有效,哪一种是正确的?两者都有?哪一种最适合使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-02 01:20:22

两个人都没事。-o命令所做的唯一事情就是确定生成的可执行文件的名称。就哈斯克尔号而言,这并没有什么区别。

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

票数 3
EN

Stack Overflow用户

发布于 2012-12-02 09:13:53

以前是这样写的

代码语言:javascript
复制
ghc fac.hs

不是真的起作用。相反,你不得不说

代码语言:javascript
复制
ghc --make fac.hs

区别在于前者编译fac.hs而不执行其他操作,而后者检查fac.hs是否使用任何其他需要重新编译的模块,自动包含所需的任何包,等等。

但是,默认行为已经更改,以上两个命令现在是相同的。(我完全忘记了这是什么时候发生的,但那是很久以前的事了。)不过,您仍然可以看到带有显式--make开关的文档和示例,我个人喜欢将其包括在内。但只有我一个人。

-o开关唯一能让您更改输出名称的功能。如果您有(比方说) Main.hs,并且希望输出被称为MyCoolProgram或其他什么的话,这可能很有用。我要说的一件事是:在Linux下,fac.hs (如果是Main模块)将编译成一个名为fac的可执行文件,但在fac下它将被称为fac.exe。如果使用-o对二进制名称进行硬编码,则不会发生这种情况。我不确定你能不能运行一个不结束.exe的Windows二进制文件.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13665495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档