3

私はHaskellを学んでいて、単純な疑問が私を襲いました。GHCを使用してコンパイルするこれら2つのコマンドの違いは何ですか(facは階乗を計算するプログラムです):

ghc -o fac fac.hs

ghc fac.hs

プログラムを実行するには、fac.exeを実行します(Windowsを使用しています)。

両方が機能することを考えると、どちらが正しいですか?両方とも?そして、どれを使用するのが最も賢明ですか?

4

2 に答える 2

3

どちらもOKです。-oコマンドが実行するのは、生成される実行可能ファイルの名前を判別することだけです。Haskellに関する限り、違いはありません。

個人的には、常に「-o」を使用して明示的にし(一般に暗黙のデフォルトを回避するのが好きなので)、他のコンパイラに似せるのが好きです(たとえば、gcc Cコンパイラは、「-o」を使用するように強制します。 -o "オプション、それ以外の場合に使用されるデフォルト名は非常に醜いため)

于 2012-12-02T01:20:22.423 に答える
0

昔はその文章でした

ghc fac.hs

本当にうまくいきませんでした。代わりにあなたは言わなければなりませんでした

ghc --make fac.hs

違いは、前者はコンパイルfac.hsして他に何もしないのに対し、後者はfac.hs再コンパイルが必要な他のモジュールを使用しているかどうかを確認し、必要なパッケージを自動的に含めるなどです。

ただし、デフォルトの動作が変更され、上記の2つのコマンドは同じになりました。(これがいつ起こったかを正確に忘れていますが、それは少し前のことです。)--makeただし、明示的な切り替えを使用したドキュメントや例がまだ表示される場合があります。個人的にはそれを含めたいと思います。しかし、それは私だけです。

-oスイッチが提供するのは、出力名を変更する機能だけです。Main.hsこれは、たとえば、出力を呼び出したい場合などに役立ちますMyCoolProgram。Linuxでは(モジュールの場合)、という名前の実行可能ファイルにコンパイルされますが、Windowsでは。と呼ばれます。バイナリ名をハードコーディングするために使用する場合、これは発生しません。そして、私はあなたが終わらないWindowsバイナリを実行できるかどうかわかりません...fac.hsMainfacfac.exe-o.exe

于 2012-12-02T09:13:53.203 に答える